Source file
src/crypto/rsa/example_test.go
1
2
3
4
5 package rsa_test
6
7 import (
8 "crypto"
9 "crypto/aes"
10 "crypto/cipher"
11 "crypto/rand"
12 "crypto/rsa"
13 "crypto/sha256"
14 "crypto/x509"
15 "encoding/hex"
16 "encoding/pem"
17 "fmt"
18 "os"
19 "strings"
20 )
21
22 func ExampleGenerateKey() {
23 privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
24 if err != nil {
25 fmt.Fprintf(os.Stderr, "Error generating RSA key: %s", err)
26 return
27 }
28
29 der, err := x509.MarshalPKCS8PrivateKey(privateKey)
30 if err != nil {
31 fmt.Fprintf(os.Stderr, "Error marshalling RSA private key: %s", err)
32 return
33 }
34
35 fmt.Printf("%s", pem.EncodeToMemory(&pem.Block{
36 Type: "PRIVATE KEY",
37 Bytes: der,
38 }))
39 }
40
41 func ExampleGenerateKey_testKey() {
42
43
44 block, _ := pem.Decode([]byte(strings.ReplaceAll(
45 `-----BEGIN RSA TESTING KEY-----
46 MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso
47 tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE
48 89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU
49 l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s
50 B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59
51 3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+
52 dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI
53 FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J
54 aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2
55 BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx
56 IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/
57 fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u
58 pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT
59 Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl
60 u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD
61 fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X
62 Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE
63 k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo
64 qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS
65 CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ
66 XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw
67 AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r
68 UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0
69 2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5
70 7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3
71 -----END RSA TESTING KEY-----`, "TESTING KEY", "PRIVATE KEY")))
72 testRSA2048, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
73
74 fmt.Println("Private key bit size:", testRSA2048.N.BitLen())
75 }
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 func ExampleDecryptPKCS1v15SessionKey() {
97
98
99
100 key := make([]byte, 32)
101 if _, err := rand.Read(key); err != nil {
102 panic("RNG failure")
103 }
104
105 rsaCiphertext, _ := hex.DecodeString("aabbccddeeff")
106
107 if err := rsa.DecryptPKCS1v15SessionKey(nil, rsaPrivateKey, rsaCiphertext, key); err != nil {
108
109
110
111
112 fmt.Fprintf(os.Stderr, "Error from RSA decryption: %s\n", err)
113 return
114 }
115
116
117
118 block, err := aes.NewCipher(key)
119 if err != nil {
120 panic("aes.NewCipher failed: " + err.Error())
121 }
122
123
124
125 var zeroNonce [12]byte
126 aead, err := cipher.NewGCM(block)
127 if err != nil {
128 panic("cipher.NewGCM failed: " + err.Error())
129 }
130 ciphertext, _ := hex.DecodeString("00112233445566")
131 plaintext, err := aead.Open(nil, zeroNonce[:], ciphertext, nil)
132 if err != nil {
133
134
135 fmt.Fprintf(os.Stderr, "Error decrypting: %s\n", err)
136 return
137 }
138
139 fmt.Printf("Plaintext: %s\n", plaintext)
140 }
141
142 func ExampleSignPKCS1v15() {
143 message := []byte("message to be signed")
144
145
146
147
148
149
150 hashed := sha256.Sum256(message)
151
152 signature, err := rsa.SignPKCS1v15(nil, rsaPrivateKey, crypto.SHA256, hashed[:])
153 if err != nil {
154 fmt.Fprintf(os.Stderr, "Error from signing: %s\n", err)
155 return
156 }
157
158 fmt.Printf("Signature: %x\n", signature)
159 }
160
161 func ExampleVerifyPKCS1v15() {
162 message := []byte("message to be signed")
163 signature, _ := hex.DecodeString("ad2766728615cc7a746cc553916380ca7bfa4f8983b990913bc69eb0556539a350ff0f8fe65ddfd3ebe91fe1c299c2fac135bc8c61e26be44ee259f2f80c1530")
164
165
166
167
168
169
170 hashed := sha256.Sum256(message)
171
172 err := rsa.VerifyPKCS1v15(&rsaPrivateKey.PublicKey, crypto.SHA256, hashed[:], signature)
173 if err != nil {
174 fmt.Fprintf(os.Stderr, "Error from verification: %s\n", err)
175 return
176 }
177
178
179 }
180
181 func ExampleEncryptOAEP() {
182 secretMessage := []byte("send reinforcements, we're going to advance")
183 label := []byte("orders")
184
185
186
187 rng := rand.Reader
188
189 ciphertext, err := rsa.EncryptOAEP(sha256.New(), rng, &test2048Key.PublicKey, secretMessage, label)
190 if err != nil {
191 fmt.Fprintf(os.Stderr, "Error from encryption: %s\n", err)
192 return
193 }
194
195
196
197 fmt.Printf("Ciphertext: %x\n", ciphertext)
198 }
199
200 func ExampleDecryptOAEP() {
201 ciphertext, _ := hex.DecodeString("4d1ee10e8f286390258c51a5e80802844c3e6358ad6690b7285218a7c7ed7fc3a4c7b950fbd04d4b0239cc060dcc7065ca6f84c1756deb71ca5685cadbb82be025e16449b905c568a19c088a1abfad54bf7ecc67a7df39943ec511091a34c0f2348d04e058fcff4d55644de3cd1d580791d4524b92f3e91695582e6e340a1c50b6c6d78e80b4e42c5b4d45e479b492de42bbd39cc642ebb80226bb5200020d501b24a37bcc2ec7f34e596b4fd6b063de4858dbf5a4e3dd18e262eda0ec2d19dbd8e890d672b63d368768360b20c0b6b8592a438fa275e5fa7f60bef0dd39673fd3989cc54d2cb80c08fcd19dacbc265ee1c6014616b0e04ea0328c2a04e73460")
202 label := []byte("orders")
203
204 plaintext, err := rsa.DecryptOAEP(sha256.New(), nil, test2048Key, ciphertext, label)
205 if err != nil {
206 fmt.Fprintf(os.Stderr, "Error from decryption: %s\n", err)
207 return
208 }
209
210 fmt.Printf("Plaintext: %s\n", plaintext)
211
212
213
214
215 }
216
View as plain text