change computer
This commit is contained in:
1 parent
52a13b9cab
commit
6b3c99664c
7 files changed
+97
-11
No files matched your search
@@ -3,14 +3,22 @@ package contract
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"crypto/rsa"
|
||||
"github.com/didiercrunch/filou/helper"
|
||||
)
|
||||
|
||||
type GetRSAPrivateKey func() (*rsa.PrivateKey, error)
|
||||
|
||||
type AcceptedContract struct {
|
||||
Hash string
|
||||
BlockCipher string
|
||||
BlockCipherMode string
|
||||
AsymetricCryptography string
|
||||
Hash string
|
||||
BlockCipher string
|
||||
BlockCipherMode string
|
||||
|
||||
AsynchronousEncryptionScheme string
|
||||
SignatureScheme string
|
||||
|
||||
RsaPublicKey *rsa.PublicKey
|
||||
RsaPrivateKey GetRSAPrivateKey
|
||||
}
|
||||
|
||||
func listContains(lst []string, elm string) bool {
|
||||
@@ -31,6 +39,22 @@ func getFirstItemInList1ThatIsAlsoInList2(lst1, lst2 []string) (string, error) {
|
||||
return "", errors.New("no items in list1 is in list2")
|
||||
}
|
||||
|
||||
func getAsynchronousEncryptionScheme(prvCtr *PrivateContract, pubCtr *PublicContract) (string, error) {
|
||||
if b, err := getFirstItemInList1ThatIsAlsoInList2(pubCtr.AcceptedAsynchronousEncryptionScheme, prvCtr.AcceptedAsynchronousEncryptionScheme); err != nil {
|
||||
return "", errors.New("cannot find a asynchronous encryption scheme that satisfy both contracts")
|
||||
} else {
|
||||
return b, nil
|
||||
}
|
||||
}
|
||||
|
||||
func getSignatureScheme(prvCtr *PrivateContract, pubCtr *PublicContract) (string, error) {
|
||||
if b, err := getFirstItemInList1ThatIsAlsoInList2(pubCtr.AcceptedSignatureScheme, prvCtr.AcceptedSignatureScheme); err != nil {
|
||||
return "", errors.New("cannot find a signature scheme that satisfy both contracts")
|
||||
} else {
|
||||
return b, nil
|
||||
}
|
||||
}
|
||||
|
||||
func getBestBlockCipher(prvCtr *PrivateContract, pubCtr *PublicContract) (string, error) {
|
||||
if b, err := getFirstItemInList1ThatIsAlsoInList2(pubCtr.AcceptedBlockCyphers, prvCtr.AcceptedBlockCyphers); err != nil {
|
||||
return "", errors.New("cannot find a block cypher that satisfy both contracts")
|
||||
@@ -68,6 +92,12 @@ func GetAcceptedContract(prvCtr *PrivateContract, pubCtr *PublicContract) (*Acce
|
||||
if ret.BlockCipherMode, err = getBestBlockCipherMode(prvCtr, pubCtr); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
}
|
||||
if ret.AsynchronousEncryptionScheme, err = getAsynchronousEncryptionScheme(prvCtr, pubCtr); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
}
|
||||
if ret.SignatureScheme, err = getSignatureScheme(prvCtr, pubCtr); err != nil {
|
||||
errs = append(errs, err.Error())
|
||||
}
|
||||
|
||||
return ret, helper.JoinAsError(errs)
|
||||
}
|
||||
Reference in new issue
Block a user