@@ -26,6 +26,7 @@ import (
26
26
"crypto/sha256"
27
27
"encoding/base64"
28
28
"encoding/json"
29
+ "errors"
29
30
"fmt"
30
31
"hash"
31
32
"net/url"
@@ -34,7 +35,6 @@ import (
34
35
"strings"
35
36
36
37
"github.com/miekg/pkcs11"
37
- "github.com/pkg/errors"
38
38
pkcs11uri "github.com/stefanberger/go-pkcs11uri"
39
39
)
40
40
@@ -77,11 +77,11 @@ func rsaPublicEncryptOAEP(pubKey *rsa.PublicKey, plaintext []byte) ([]byte, stri
77
77
hashfunc = sha256 .New ()
78
78
hashalg = "sha256"
79
79
default :
80
- return nil , "" , errors .Errorf ("Unsupported OAEP hash '%s'" , oaephash )
80
+ return nil , "" , fmt .Errorf ("Unsupported OAEP hash '%s'" , oaephash )
81
81
}
82
82
ciphertext , err := rsa .EncryptOAEP (hashfunc , rand .Reader , pubKey , plaintext , OAEPLabel )
83
83
if err != nil {
84
- return nil , "" , errors . Wrapf ( err , "rss.EncryptOAEP failed" )
84
+ return nil , "" , fmt . Errorf ( "rss.EncryptOAEP failed: %w" , err )
85
85
}
86
86
87
87
return ciphertext , hashalg , nil
@@ -105,7 +105,7 @@ func pkcs11UriGetLoginParameters(p11uri *pkcs11uri.Pkcs11URI, privateKeyOperatio
105
105
106
106
module , err := p11uri .GetModule ()
107
107
if err != nil {
108
- return "" , "" , 0 , errors . Wrap ( err , "No module available in pkcs11 URI" )
108
+ return "" , "" , 0 , fmt . Errorf ( "No module available in pkcs11 URI: %w" , err )
109
109
}
110
110
111
111
slotid := int64 (- 1 )
@@ -114,7 +114,7 @@ func pkcs11UriGetLoginParameters(p11uri *pkcs11uri.Pkcs11URI, privateKeyOperatio
114
114
if ok {
115
115
slotid , err = strconv .ParseInt (slot , 10 , 64 )
116
116
if err != nil {
117
- return "" , "" , 0 , errors . Wrap ( err , "slot-id is not a valid number" )
117
+ return "" , "" , 0 , fmt . Errorf ( "slot-id is not a valid number: %w" , err )
118
118
}
119
119
if slotid < 0 {
120
120
return "" , "" , 0 , fmt .Errorf ("slot-id is a negative number" )
@@ -141,13 +141,13 @@ func pkcs11UriGetKeyIdAndLabel(p11uri *pkcs11uri.Pkcs11URI) (string, string, err
141
141
func pkcs11OpenSession (p11ctx * pkcs11.Ctx , slotid uint , pin string ) (session pkcs11.SessionHandle , err error ) {
142
142
session , err = p11ctx .OpenSession (slotid , pkcs11 .CKF_SERIAL_SESSION | pkcs11 .CKF_RW_SESSION )
143
143
if err != nil {
144
- return 0 , errors . Wrapf ( err , "OpenSession to slot %d failed" , slotid )
144
+ return 0 , fmt . Errorf ( "OpenSession to slot %d failed: %w " , slotid , err )
145
145
}
146
146
if len (pin ) > 0 {
147
147
err = p11ctx .Login (session , pkcs11 .CKU_USER , pin )
148
148
if err != nil {
149
149
_ = p11ctx .CloseSession (session )
150
- return 0 , errors . Wrap ( err , "Could not login to device" )
150
+ return 0 , fmt . Errorf ( "Could not login to device: %w" , err )
151
151
}
152
152
}
153
153
return session , nil
@@ -171,7 +171,7 @@ func pkcs11UriLogin(p11uri *pkcs11uri.Pkcs11URI, privateKeyOperation bool) (ctx
171
171
if err != nil {
172
172
p11Err := err .(pkcs11.Error )
173
173
if p11Err != pkcs11 .CKR_CRYPTOKI_ALREADY_INITIALIZED {
174
- return nil , 0 , errors . Wrap ( err , "Initialize failed" )
174
+ return nil , 0 , fmt . Errorf ( "Initialize failed: %w" , err )
175
175
}
176
176
}
177
177
@@ -182,7 +182,7 @@ func pkcs11UriLogin(p11uri *pkcs11uri.Pkcs11URI, privateKeyOperation bool) (ctx
182
182
183
183
slots , err := p11ctx .GetSlotList (true )
184
184
if err != nil {
185
- return nil , 0 , errors . Wrap ( err , "GetSlotList failed" )
185
+ return nil , 0 , fmt . Errorf ( "GetSlotList failed: %w" , err )
186
186
}
187
187
188
188
tokenlabel , ok := p11uri .GetPathAttribute ("token" , false )
@@ -234,24 +234,24 @@ func findObject(p11ctx *pkcs11.Ctx, session pkcs11.SessionHandle, class uint, ke
234
234
}
235
235
236
236
if err := p11ctx .FindObjectsInit (session , template ); err != nil {
237
- return 0 , errors . Wrap ( err , "FindObjectsInit failed" )
237
+ return 0 , fmt . Errorf ( "FindObjectsInit failed: %w" , err )
238
238
}
239
239
240
240
obj , _ , err := p11ctx .FindObjects (session , 100 )
241
241
if err != nil {
242
- return 0 , errors . Wrap ( err , "FindObjects failed" )
242
+ return 0 , fmt . Errorf ( "FindObjects failed: %w" , err )
243
243
}
244
244
245
245
if err := p11ctx .FindObjectsFinal (session ); err != nil {
246
- return 0 , errors . Wrap ( err , "FindObjectsFinal failed" )
246
+ return 0 , fmt . Errorf ( "FindObjectsFinal failed: %w" , err )
247
247
}
248
248
if len (obj ) > 1 {
249
- return 0 , errors .Errorf ("There are too many (=%d) keys with %s" , len (obj ), msg )
249
+ return 0 , fmt .Errorf ("There are too many (=%d) keys with %s" , len (obj ), msg )
250
250
} else if len (obj ) == 1 {
251
251
return obj [0 ], nil
252
252
}
253
253
254
- return 0 , errors .Errorf ("Could not find any object with %s" , msg )
254
+ return 0 , fmt .Errorf ("Could not find any object with %s" , msg )
255
255
}
256
256
257
257
// publicEncryptOAEP uses a public key described by a pkcs11 URI to OAEP encrypt the given plaintext
@@ -291,17 +291,17 @@ func publicEncryptOAEP(pubKey *Pkcs11KeyFileObject, plaintext []byte) ([]byte, s
291
291
oaep = OAEPSha256Params
292
292
hashalg = "sha256"
293
293
default :
294
- return nil , "" , errors .Errorf ("Unsupported OAEP hash '%s'" , oaephash )
294
+ return nil , "" , fmt .Errorf ("Unsupported OAEP hash '%s'" , oaephash )
295
295
}
296
296
297
297
err = p11ctx .EncryptInit (session , []* pkcs11.Mechanism {pkcs11 .NewMechanism (pkcs11 .CKM_RSA_PKCS_OAEP , oaep )}, p11PubKey )
298
298
if err != nil {
299
- return nil , "" , errors . Wrap ( err , "EncryptInit error" )
299
+ return nil , "" , fmt . Errorf ( "EncryptInit error: %w" , err )
300
300
}
301
301
302
302
ciphertext , err := p11ctx .Encrypt (session , plaintext )
303
303
if err != nil {
304
- return nil , "" , errors . Wrap ( err , "Encrypt failed" )
304
+ return nil , "" , fmt . Errorf ( "Encrypt failed: %w" , err )
305
305
}
306
306
return ciphertext , hashalg , nil
307
307
}
@@ -339,16 +339,16 @@ func privateDecryptOAEP(privKeyObj *Pkcs11KeyFileObject, ciphertext []byte, hash
339
339
case "sha256" :
340
340
oaep = OAEPSha256Params
341
341
default :
342
- return nil , errors .Errorf ("Unsupported hash algorithm '%s' for decryption" , hashalg )
342
+ return nil , fmt .Errorf ("Unsupported hash algorithm '%s' for decryption" , hashalg )
343
343
}
344
344
345
345
err = p11ctx .DecryptInit (session , []* pkcs11.Mechanism {pkcs11 .NewMechanism (pkcs11 .CKM_RSA_PKCS_OAEP , oaep )}, p11PrivKey )
346
346
if err != nil {
347
- return nil , errors . Wrapf ( err , "DecryptInit failed" )
347
+ return nil , fmt . Errorf ( "DecryptInit failed: %w" , err )
348
348
}
349
349
plaintext , err := p11ctx .Decrypt (session , ciphertext )
350
350
if err != nil {
351
- return nil , errors . Wrapf ( err , "Decrypt failed" )
351
+ return nil , fmt . Errorf ( "Decrypt failed: %w" , err )
352
352
}
353
353
return plaintext , err
354
354
}
@@ -403,7 +403,7 @@ func EncryptMultiple(pubKeys []interface{}, data []byte) ([]byte, error) {
403
403
case * Pkcs11KeyFileObject :
404
404
ciphertext , hashalg , err = publicEncryptOAEP (pkey , data )
405
405
default :
406
- err = errors .Errorf ("Unsupported key object type for pkcs11 public key" )
406
+ err = fmt .Errorf ("Unsupported key object type for pkcs11 public key" )
407
407
}
408
408
if err != nil {
409
409
return nil , err
@@ -442,13 +442,13 @@ func Decrypt(privKeyObjs []*Pkcs11KeyFileObject, pkcs11blobstr []byte) ([]byte,
442
442
pkcs11blob := Pkcs11Blob {}
443
443
err := json .Unmarshal (pkcs11blobstr , & pkcs11blob )
444
444
if err != nil {
445
- return nil , errors . Wrapf ( err , "Could not parse Pkcs11Blob" )
445
+ return nil , fmt . Errorf ( "Could not parse Pkcs11Blob: %w" , err )
446
446
}
447
447
switch pkcs11blob .Version {
448
448
case 0 :
449
449
// latest supported version
450
450
default :
451
- return nil , errors .Errorf ("found Pkcs11Blob with version %d but maximum supported version is 0" , pkcs11blob .Version )
451
+ return nil , fmt .Errorf ("found Pkcs11Blob with version %d but maximum supported version is 0" , pkcs11blob .Version )
452
452
}
453
453
// since we do trial and error, collect all encountered errors
454
454
errs := ""
@@ -458,7 +458,7 @@ func Decrypt(privKeyObjs []*Pkcs11KeyFileObject, pkcs11blobstr []byte) ([]byte,
458
458
case 0 :
459
459
// last supported version
460
460
default :
461
- return nil , errors .Errorf ("found Pkcs11Recipient with version %d but maximum supported version is 0" , recipient .Version )
461
+ return nil , fmt .Errorf ("found Pkcs11Recipient with version %d but maximum supported version is 0" , recipient .Version )
462
462
}
463
463
464
464
ciphertext , err := base64 .StdEncoding .DecodeString (recipient .Blob )
@@ -481,5 +481,5 @@ func Decrypt(privKeyObjs []*Pkcs11KeyFileObject, pkcs11blobstr []byte) ([]byte,
481
481
}
482
482
}
483
483
484
- return nil , errors .Errorf ("Could not find a pkcs11 key for decryption:\n %s" , errs )
484
+ return nil , fmt .Errorf ("Could not find a pkcs11 key for decryption:\n %s" , errs )
485
485
}
0 commit comments