Skip to content

Commit

Permalink
Merge pull request #50 from microsoft/shawrite2
Browse files Browse the repository at this point in the history
sha: add WriteString and WriteByte method
  • Loading branch information
qmuntal committed May 2, 2023
2 parents 0759933 + 6755754 commit 59b4321
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 5 deletions.
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
ARG VARIANT=1.17-bullseye
FROM mcr.microsoft.com/vscode/devcontainers/go:0-${VARIANT}
FROM mcr.microsoft.com/devcontainers/go:0-${VARIANT}

RUN apt-get update \
&& apt-get install -y build-essential
8 changes: 5 additions & 3 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
"GO_OPENSSL_VERSION_OVERRIDE": "1.1.0",
},
"onCreateCommand": "sh ${containerWorkspaceFolder}/scripts/openssl.sh ${GO_OPENSSL_VERSION_OVERRIDE}",
"extensions": [
"golang.go"
]
"customizations": {
"vscode": {
"extensions": ["golang.go"]
}
},
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module github.com/microsoft/go-crypto-openssl

go 1.16
go 1.17
20 changes: 20 additions & 0 deletions openssl/sha.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,26 @@ func (h *evpHash) Write(p []byte) (int, error) {
return len(p), nil
}

func (h *evpHash) WriteString(s string) (int, error) {
// TODO: use unsafe.StringData once we drop support
// for go1.19 and earlier.
hdr := (*struct {
Data *byte
Len int
})(unsafe.Pointer(&s))
if len(s) > 0 && C.go_openssl_EVP_DigestUpdate(h.ctx, unsafe.Pointer(hdr.Data), C.size_t(len(s))) == 0 {
panic("openssl: EVP_DigestUpdate failed")
}
return len(s), nil
}

func (h *evpHash) WriteByte(c byte) error {
if C.go_openssl_EVP_DigestUpdate(h.ctx, unsafe.Pointer(&c), 1) == 0 {
panic("openssl: EVP_DigestUpdate failed")
}
return nil
}

func (h *evpHash) Size() int {
return h.size
}
Expand Down
18 changes: 18 additions & 0 deletions openssl/sha_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"bytes"
"encoding"
"hash"
"io"
"testing"
)

Expand Down Expand Up @@ -62,6 +63,23 @@ func TestSha(t *testing.T) {
if !bytes.Equal(sum, initSum) {
t.Errorf("got:%x want:%x", sum, initSum)
}

bw := h.(io.ByteWriter)
for i := 0; i < len(msg); i++ {
bw.WriteByte(msg[i])
}
h.Reset()
sum = h.Sum(nil)
if !bytes.Equal(sum, initSum) {
t.Errorf("got:%x want:%x", sum, initSum)
}

h.(io.StringWriter).WriteString(string(msg))
h.Reset()
sum = h.Sum(nil)
if !bytes.Equal(sum, initSum) {
t.Errorf("got:%x want:%x", sum, initSum)
}
})
}
}
Expand Down

0 comments on commit 59b4321

Please sign in to comment.