Skip to content

Commit c465133

Browse files
committed
feat(client): sign / verify helper methods
Signed-off-by: Pierre-Henri Symoneaux <[email protected]>
1 parent 3ae7229 commit c465133

File tree

3 files changed

+138
-0
lines changed

3 files changed

+138
-0
lines changed

examples/main.go

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ func main() {
5252
test_encrypt_decrypt_rsa_pkcs1(client)
5353
test_locate_by_range(client)
5454

55+
test_sign_verify_rsa(client)
56+
5557
test_state_transitions(client)
5658
test_register(client)
5759
test_usage_limits(client)

examples/sign_verify.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
import (
4+
"github.com/ovh/kmip-go"
5+
"github.com/ovh/kmip-go/kmipclient"
6+
)
7+
8+
func test_sign_verify_rsa(client *kmipclient.Client) {
9+
data := []byte("foobarbaz")
10+
cparams := kmip.CryptographicParameters{
11+
DigitalSignatureAlgorithm: ptrTo(kmip.SHA_256WithRSAEncryptionPKCS_1v1_5),
12+
}
13+
14+
key := client.CreateKeyPair().RSA(2048, kmip.Sign, kmip.Verify).
15+
Common().WithName("Test-Encrypt-RSA").
16+
WithAttribute(kmip.AttributeNameState, kmip.StateActive).
17+
MustExec()
18+
19+
resp := client.Sign(key.PrivateKeyUniqueIdentifier).
20+
WithCryptographicParameters(cparams).
21+
Data(data).
22+
MustExec()
23+
24+
client.SignatureVerify(key.PublicKeyUniqueIdentifier).
25+
WithCryptographicParameters(cparams).
26+
Data(data).
27+
Signature(*resp.SignatureData).
28+
MustExec()
29+
}

kmipclient/sign_verify.go

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package kmipclient
2+
3+
import (
4+
"github.com/ovh/kmip-go"
5+
"github.com/ovh/kmip-go/payloads"
6+
)
7+
8+
type ExecSign struct {
9+
Executor[*payloads.SignRequestPayload, *payloads.SignResponsePayload]
10+
}
11+
12+
type ExecSignatureVerify struct {
13+
Executor[*payloads.SignatureVerifyRequestPayload, *payloads.SignatureVerifyResponsePayload]
14+
}
15+
16+
type ExecSignWantsData struct {
17+
req *payloads.SignRequestPayload
18+
client *Client
19+
}
20+
21+
type ExecSignatureVerifyWantsData struct {
22+
req *payloads.SignatureVerifyRequestPayload
23+
client *Client
24+
}
25+
26+
type ExecSignatureVerifyWantsSignature struct {
27+
req *payloads.SignatureVerifyRequestPayload
28+
client *Client
29+
}
30+
31+
func (c *Client) Sign(id string) ExecSignWantsData {
32+
return ExecSignWantsData{
33+
client: c,
34+
req: &payloads.SignRequestPayload{
35+
UniqueIdentifier: &id,
36+
},
37+
}
38+
}
39+
40+
func (ex ExecSignWantsData) WithCryptographicParameters(params kmip.CryptographicParameters) ExecSignWantsData {
41+
ex.req.CryptographicParameters = &params
42+
return ex
43+
}
44+
45+
func (ex ExecSignWantsData) Data(data []byte) ExecSign {
46+
ex.req.Data = &data
47+
return ExecSign{
48+
Executor[*payloads.SignRequestPayload, *payloads.SignResponsePayload]{
49+
client: ex.client,
50+
req: ex.req,
51+
},
52+
}
53+
}
54+
55+
func (ex ExecSignWantsData) DigestedData(data []byte) ExecSign {
56+
ex.req.DigestedData = &data
57+
return ExecSign{
58+
Executor[*payloads.SignRequestPayload, *payloads.SignResponsePayload]{
59+
client: ex.client,
60+
req: ex.req,
61+
},
62+
}
63+
}
64+
65+
func (c *Client) SignatureVerify(id string) ExecSignatureVerifyWantsData {
66+
return ExecSignatureVerifyWantsData{
67+
client: c,
68+
req: &payloads.SignatureVerifyRequestPayload{
69+
UniqueIdentifier: &id,
70+
},
71+
}
72+
}
73+
74+
func (ex ExecSignatureVerifyWantsData) WithCryptographicParameters(params kmip.CryptographicParameters) ExecSignatureVerifyWantsData {
75+
ex.req.CryptographicParameters = &params
76+
return ex
77+
}
78+
79+
func (ex ExecSignatureVerifyWantsData) Data(data []byte) ExecSignatureVerifyWantsSignature {
80+
ex.req.Data = &data
81+
return ExecSignatureVerifyWantsSignature(ex)
82+
}
83+
84+
func (ex ExecSignatureVerifyWantsData) DigestedData(data []byte) ExecSignatureVerifyWantsSignature {
85+
ex.req.DigestedData = &data
86+
return ExecSignatureVerifyWantsSignature(ex)
87+
}
88+
89+
func (ex ExecSignatureVerifyWantsData) Signature(sig []byte) ExecSignatureVerify {
90+
ex.req.SignatureData = &sig
91+
return ExecSignatureVerify{
92+
Executor[*payloads.SignatureVerifyRequestPayload, *payloads.SignatureVerifyResponsePayload]{
93+
client: ex.client,
94+
req: ex.req,
95+
},
96+
}
97+
}
98+
99+
func (ex ExecSignatureVerifyWantsSignature) Signature(sig []byte) ExecSignatureVerify {
100+
ex.req.SignatureData = &sig
101+
return ExecSignatureVerify{
102+
Executor[*payloads.SignatureVerifyRequestPayload, *payloads.SignatureVerifyResponsePayload]{
103+
client: ex.client,
104+
req: ex.req,
105+
},
106+
}
107+
}

0 commit comments

Comments
 (0)