Skip to content

Commit f1dfab1

Browse files
fundthmcalculusallibell
authored andcommitted
Java, C#, Python, Ruby, Golang SHA256 exposed (#358)
1 parent 116b96e commit f1dfab1

File tree

21 files changed

+1507
-21
lines changed

21 files changed

+1507
-21
lines changed

docs/reference/proto/index.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
- [Blake3HashResponse](#okapi.hashing.v1.Blake3HashResponse)
1616
- [Blake3KeyedHashRequest](#okapi.hashing.v1.Blake3KeyedHashRequest)
1717
- [Blake3KeyedHashResponse](#okapi.hashing.v1.Blake3KeyedHashResponse)
18+
- [SHA256HashRequest](#okapi.hashing.v1.SHA256HashRequest)
19+
- [SHA256HashResponse](#okapi.hashing.v1.SHA256HashResponse)
1820

1921
- [okapi/keys/v1/keys.proto](#okapi/keys/v1/keys.proto)
2022
- [GenerateKeyRequest](#okapi.keys.v1.GenerateKeyRequest)
@@ -213,6 +215,36 @@
213215

214216

215217

218+
219+
<a name="okapi.hashing.v1.SHA256HashRequest"></a>
220+
221+
### SHA256HashRequest
222+
223+
224+
225+
| Field | Type | Label | Description |
226+
| ----- | ---- | ----- | ----------- |
227+
| data | [bytes](#bytes) | | |
228+
229+
230+
231+
232+
233+
234+
<a name="okapi.hashing.v1.SHA256HashResponse"></a>
235+
236+
### SHA256HashResponse
237+
238+
239+
240+
| Field | Type | Label | Description |
241+
| ----- | ---- | ----- | ----------- |
242+
| digest | [bytes](#bytes) | | |
243+
244+
245+
246+
247+
216248

217249

218250

dotnet/Library/Okapi/Hashing.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@ namespace Okapi.Hashing;
44

55
public static class Blake3
66
{
7-
/// <summary>
8-
/// Generate new key
9-
/// </summary>
10-
/// <param name="request"></param>
11-
/// <returns></returns>
127
public static Blake3HashResponse Hash(Blake3HashRequest request)
138
{
149
return Native.Call<Blake3HashRequest, Blake3HashResponse>(request, Native.blake3_hash);
@@ -23,4 +18,12 @@ public static Blake3DeriveKeyResponse DeriveKey(Blake3DeriveKeyRequest request)
2318
{
2419
return Native.Call<Blake3DeriveKeyRequest, Blake3DeriveKeyResponse>(request, Native.blake3_derive_key);
2520
}
26-
}
21+
}
22+
23+
public static class Sha256
24+
{
25+
public static SHA256HashResponse Hash(SHA256HashRequest request)
26+
{
27+
return Native.Call<SHA256HashRequest, SHA256HashResponse>(request, Native.sha256_hash);
28+
}
29+
}

dotnet/Library/Okapi/Native.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ internal static TResponse Call<TRequest, TResponse>(TRequest request, NativeMeth
7070

7171
#region Hashing
7272

73+
[DllImport(LibraryName, CharSet = CharSet.Auto, BestFitMapping = false, ThrowOnUnmappableChar = true)]
74+
internal static extern int sha256_hash(ByteBuffer request, out ByteBuffer response, out ExternError error);
75+
7376
[DllImport(LibraryName, CharSet = CharSet.Auto, BestFitMapping = false, ThrowOnUnmappableChar = true)]
7477
internal static extern int blake3_hash(ByteBuffer request, out ByteBuffer response, out ExternError error);
7578

dotnet/Tests/Okapi.Tests/HashingTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ public class HashingTests
2222

2323
private readonly byte[] data = { 0, 1, 2 };
2424

25+
[Fact]
26+
public void TestSha256Hash()
27+
{
28+
var request = new SHA256HashRequest() { Data = ByteString.CopyFromUtf8("4113") };
29+
var response = Sha256.Hash(request);
30+
Assert.Equal("71b3af35d9d53d24e7462177da41b8acd5e2ef4afc333dd9272cb2ab8743b3db", response.Digest.ToLowerCaseHex());
31+
}
32+
2533
[Fact]
2634
public void TestBlake3Hash()
2735
{

go/okapi/Hashing.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
)
66

77
type Hasher interface {
8+
Sha256Hash(request *okapiproto.SHA256HashRequest) (*okapiproto.SHA256HashResponse, error)
89
Blake3Hash(request *okapiproto.Blake3HashRequest) (*okapiproto.Blake3HashResponse, error)
910
Blake3KeyedHash(request *okapiproto.Blake3KeyedHashRequest) (*okapiproto.Blake3KeyedHashResponse, error)
1011
Blake3DeriveKey(request *okapiproto.Blake3DeriveKeyRequest) (*okapiproto.Blake3DeriveKeyResponse, error)
@@ -16,6 +17,12 @@ func Hashing() Hasher {
1617

1718
type hasher struct{}
1819

20+
func (h *hasher) Sha256Hash(request *okapiproto.SHA256HashRequest) (*okapiproto.SHA256HashResponse, error) {
21+
response := okapiproto.SHA256HashResponse{}
22+
err := callOkapiNative(request, &response, sha256Hash)
23+
return &response, err
24+
}
25+
1926
func (h *hasher) Blake3Hash(request *okapiproto.Blake3HashRequest) (*okapiproto.Blake3HashResponse, error) {
2027
response := okapiproto.Blake3HashResponse{}
2128
err := callOkapiNative(request, &response, blake3Hash)

go/okapi/hashing_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@ import (
77
"testing"
88
)
99

10+
func TestSHA256Hash(t *testing.T) {
11+
assert := assert.New(t)
12+
h := Hashing()
13+
14+
request := okapiproto.SHA256HashRequest{}
15+
request.Data = []byte("4113")
16+
17+
response, err := h.Sha256Hash(&request)
18+
assert.Nil(err)
19+
assert.NotNil(response.Digest)
20+
responseHash := hex.EncodeToString(response.Digest)
21+
expectedHash := "71b3af35d9d53d24e7462177da41b8acd5e2ef4afc333dd9272cb2ab8743b3db"
22+
23+
assert.Equal(expectedHash[0:len(responseHash)], responseHash)
24+
}
25+
1026
func TestBlake3Hash(t *testing.T) {
1127
assert := assert.New(t)
1228
h := Hashing()

go/okapi/native.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ func (d *DidError) Error() string {
3434

3535
type okapiCall func(request C.ByteBuffer, response *C.ByteBuffer, err *C.ExternError) int32
3636

37+
func sha256Hash(request C.ByteBuffer, response *C.ByteBuffer, err *C.ExternError) int32 {
38+
return int32(C.sha256_hash(request, response, err))
39+
}
3740
func blake3Hash(request C.ByteBuffer, response *C.ByteBuffer, err *C.ExternError) int32 {
3841
return int32(C.blake3_hash(request, response, err))
3942
}

go/okapiproto/hashing.pb.go

Lines changed: 134 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

java/src/main/java/trinsic/okapi/Hashing.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,14 @@ public static trinsic.okapi.hashing.v1.Hashing.Blake3HashResponse blake3_hash(tr
2929
errBuffer.raiseError(result);
3030
return trinsic.okapi.hashing.v1.Hashing.Blake3HashResponse.parseFrom(bufferToByteArray(responseBuffer));
3131
}
32+
33+
public static trinsic.okapi.hashing.v1.Hashing.SHA256HashResponse sha256_hash(trinsic.okapi.hashing.v1.Hashing.SHA256HashRequest request) throws DidException, InvalidProtocolBufferException {
34+
OkapiByteBuffer.ByValue requestBuffer = messageToBuffer(request);
35+
OkapiByteBuffer responseBuffer = new OkapiByteBuffer();
36+
ExternError errBuffer = new ExternError();
37+
var result = getNativeLibrary().sha256_hash(requestBuffer, responseBuffer, errBuffer);
38+
errBuffer.raiseError(result);
39+
return trinsic.okapi.hashing.v1.Hashing.SHA256HashResponse.parseFrom(bufferToByteArray(responseBuffer));
40+
}
3241
}
3342

java/src/main/java/trinsic/okapi/OkapiNative.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ public interface IOkapiC extends com.sun.jna.Library {
9696

9797
int ldproofs_create_proof(OkapiByteBuffer.ByValue request, OkapiByteBuffer response, ExternError err);
9898

99+
int sha256_hash(OkapiByteBuffer.ByValue request, OkapiByteBuffer response, ExternError err);
100+
99101
int blake3_hash(OkapiByteBuffer.ByValue request, OkapiByteBuffer response, ExternError err);
100102

101103
int blake3_keyed_hash(OkapiByteBuffer.ByValue request, OkapiByteBuffer response, ExternError err);

0 commit comments

Comments
 (0)