Skip to content

Commit 17eb9c3

Browse files
committed
rsa_test.go: add more unit tests for TestImportRSAPublicKeyBlob.
1 parent 414225c commit 17eb9c3

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

wincrypto/rsa_test.go

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package wincrypto
22

33
import (
4+
"bytes"
45
"crypto/ed25519"
56
"crypto/rand"
67
"crypto/rsa"
78
"crypto/x509"
9+
"encoding/binary"
810
"encoding/pem"
911
"os"
1012
"testing"
@@ -126,6 +128,107 @@ func TestImportRSAPublicKeyBlob(t *testing.T) {
126128
require.NoError(t, err)
127129
require.NotNil(t, publicKey)
128130
})
131+
132+
t.Run("invalid blob header", func(t *testing.T) {
133+
publicKey, err := ImportRSAPublicKeyBlob(nil)
134+
require.EqualError(t, err, "failed to read blob header: EOF")
135+
require.Nil(t, publicKey)
136+
})
137+
138+
t.Run("invalid blob type", func(t *testing.T) {
139+
buf := new(bytes.Buffer)
140+
_ = binary.Write(buf, binary.LittleEndian, blobHeader{
141+
Type: privateKeyBlob,
142+
Version: curBlobVersion,
143+
AiKeyAlg: 0x0000A400,
144+
})
145+
146+
publicKey, err := ImportRSAPublicKeyBlob(buf.Bytes())
147+
require.EqualError(t, err, "invalid blob type")
148+
require.Nil(t, publicKey)
149+
})
150+
151+
t.Run("invalid blob version", func(t *testing.T) {
152+
buf := new(bytes.Buffer)
153+
_ = binary.Write(buf, binary.LittleEndian, blobHeader{
154+
Type: publicKeyBlob,
155+
Version: 1,
156+
AiKeyAlg: 0x0000A400,
157+
})
158+
159+
publicKey, err := ImportRSAPublicKeyBlob(buf.Bytes())
160+
require.EqualError(t, err, "invalid blob version")
161+
require.Nil(t, publicKey)
162+
})
163+
164+
t.Run("failed to read blob public key", func(t *testing.T) {
165+
buf := new(bytes.Buffer)
166+
_ = binary.Write(buf, binary.LittleEndian, blobHeader{
167+
Type: publicKeyBlob,
168+
Version: curBlobVersion,
169+
AiKeyAlg: 0x0000A400,
170+
})
171+
_ = binary.Write(buf, binary.LittleEndian, uint32(magicRSA1))
172+
173+
publicKey, err := ImportRSAPublicKeyBlob(buf.Bytes())
174+
require.EqualError(t, err, "failed to read blob public key: unexpected EOF")
175+
require.Nil(t, publicKey)
176+
})
177+
178+
t.Run("invalid blob magic", func(t *testing.T) {
179+
buf := new(bytes.Buffer)
180+
_ = binary.Write(buf, binary.LittleEndian, blobHeader{
181+
Type: publicKeyBlob,
182+
Version: curBlobVersion,
183+
AiKeyAlg: 0x0000A400,
184+
})
185+
_ = binary.Write(buf, binary.LittleEndian, rsaPubKey{
186+
Magic: 0x12345678,
187+
BitLen: 2048,
188+
PubExp: 65537,
189+
})
190+
191+
publicKey, err := ImportRSAPublicKeyBlob(buf.Bytes())
192+
require.EqualError(t, err, "invalid blob magic")
193+
require.Nil(t, publicKey)
194+
})
195+
196+
t.Run("invalid blob bit length", func(t *testing.T) {
197+
buf := new(bytes.Buffer)
198+
_ = binary.Write(buf, binary.LittleEndian, blobHeader{
199+
Type: publicKeyBlob,
200+
Version: curBlobVersion,
201+
AiKeyAlg: 0x0000A400,
202+
})
203+
_ = binary.Write(buf, binary.LittleEndian, rsaPubKey{
204+
Magic: magicRSA1,
205+
BitLen: 2047,
206+
PubExp: 65537,
207+
})
208+
209+
publicKey, err := ImportRSAPublicKeyBlob(buf.Bytes())
210+
require.EqualError(t, err, "invalid blob bit length")
211+
require.Nil(t, publicKey)
212+
})
213+
214+
t.Run("failed to read modulus", func(t *testing.T) {
215+
buf := new(bytes.Buffer)
216+
_ = binary.Write(buf, binary.LittleEndian, blobHeader{
217+
Type: publicKeyBlob,
218+
Version: curBlobVersion,
219+
AiKeyAlg: 0x0000A400,
220+
})
221+
_ = binary.Write(buf, binary.LittleEndian, rsaPubKey{
222+
Magic: magicRSA1,
223+
BitLen: 2048,
224+
PubExp: 65537,
225+
})
226+
_ = binary.Write(buf, binary.LittleEndian, []byte{0x01})
227+
228+
publicKey, err := ImportRSAPublicKeyBlob(buf.Bytes())
229+
require.EqualError(t, err, "failed to read modulus: unexpected EOF")
230+
require.Nil(t, publicKey)
231+
})
129232
}
130233

131234
func TestImportRSAPrivateKeyBlob(t *testing.T) {

0 commit comments

Comments
 (0)