68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package sw
|
|
|
|
import (
|
|
"crypto/elliptic"
|
|
"crypto/sha256"
|
|
"crypto/sha512"
|
|
"fmt"
|
|
"hash"
|
|
|
|
"golang.org/x/crypto/sha3"
|
|
)
|
|
|
|
type config struct {
|
|
ellipticCurve elliptic.Curve
|
|
hashFunction func() hash.Hash
|
|
aesBitLength int
|
|
}
|
|
|
|
func (conf *config) setSecurityLevel(securityLevel int, hashFamily string) (err error) {
|
|
switch hashFamily {
|
|
case "SHA2":
|
|
err = conf.setSecurityLevelSHA2(securityLevel)
|
|
case "SHA3":
|
|
err = conf.setSecurityLevelSHA3(securityLevel)
|
|
default:
|
|
err = fmt.Errorf("Hash Family not supported [%s]", hashFamily)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (conf *config) setSecurityLevelSHA2(level int) (err error) {
|
|
switch level {
|
|
case 256:
|
|
conf.ellipticCurve = elliptic.P256()
|
|
conf.hashFunction = sha256.New
|
|
conf.aesBitLength = 32
|
|
case 384:
|
|
conf.ellipticCurve = elliptic.P384()
|
|
conf.hashFunction = sha512.New384
|
|
conf.aesBitLength = 32
|
|
default:
|
|
err = fmt.Errorf("Security level not supported [%d]", level)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (conf *config) setSecurityLevelSHA3(level int) (err error) {
|
|
switch level {
|
|
case 256:
|
|
conf.ellipticCurve = elliptic.P256()
|
|
conf.hashFunction = sha3.New256
|
|
conf.aesBitLength = 32
|
|
case 384:
|
|
conf.ellipticCurve = elliptic.P384()
|
|
conf.hashFunction = sha3.New384
|
|
conf.aesBitLength = 32
|
|
default:
|
|
err = fmt.Errorf("Security level not supported [%d]", level)
|
|
}
|
|
return
|
|
}
|