本文整理汇总了Golang中github.com/dedis/crypto/abstract.Suite类的典型用法代码示例。如果您正苦于以下问题:Golang Suite类的具体用法?Golang Suite怎么用?Golang Suite使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Suite类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: ReadPubKey
// ReadPubKey will read the file and decrypt the public key inside
// It takes a suite to decrypt and a file name
// Returns the public key, whatever text is in front and an error if anything went wrong
func ReadPubKey(suite abstract.Suite, fileName string) (abstract.Point, string, error) {
public := suite.Point()
// Opening files
pubFile, err := os.Open(fileName)
if err != nil {
return nil, "", err
}
defer pubFile.Close()
// read the string before
by, err := ioutil.ReadAll(pubFile)
if err != nil {
return nil, "", errors.New(fmt.Sprintf("Error reading the whole file %s", err))
}
splits := strings.Split(string(by), " ")
if len(splits) != 2 {
return nil, "", errors.New(fmt.Sprintf("Error reading pub key file format is not correct (val space val)"))
}
before := splits[0]
key := strings.NewReader(splits[1])
// Some readings
public, err = ReadPub64(suite, key)
if err != nil {
return nil, "", errors.New(fmt.Sprintf("Error reading the public key itself: %s", err))
}
return public, before, nil
}
开发者ID:mlncn,项目名称:cothority,代码行数:35,代码来源:key.go
示例2: benchSign
func benchSign(suite abstract.Suite, pub []abstract.Point, pri abstract.Secret,
niter int) {
rand := suite.Cipher([]byte("example"))
for i := 0; i < niter; i++ {
Sign(suite, rand, benchMessage, Set(pub), nil, 0, pri)
}
}
开发者ID:eftychis,项目名称:crypto-1,代码行数:7,代码来源:sig_test.go
示例3: ShuffleDecrypt
// ShuffleDecrypt performs a shuffle and partial decyption of the given ciphertexts, producing correctness
// proofs in the process
func ShuffleDecrypt(suite abstract.Suite, ciphertexts []*elgamal.CipherText,
pks []*elgamal.PubKey, sk *elgamal.PriKey, nonce string, position int) (*VerifiableShuffle, error) {
amount := len(ciphertexts)
if amount == 0 {
panic("Can't shuffle 0 ciphertexts")
}
c1, c2 := elgamal.Unpack(ciphertexts)
// The ciphertexts are encrypted against these public keys; it still includes ours
// The proof of the shuffle will also be w.r.t. this public key
sumpk := elgamal.SumKeys(pks[position:])
// Do the shuffle, create a proof of its correctness
shuffledC1, shuffledC2, prover := shuffle.Shuffle(suite, sumpk.Base, sumpk.Key, c1, c2, suite.Cipher(nil))
shuffleProof, err := proof.HashProve(suite, "ElGamalShuffle"+nonce, suite.Cipher(nil), prover)
if err != nil {
return nil, err
}
shuffled := elgamal.Pack(shuffledC1, shuffledC2)
// Do the partial decryption, create a proof of its correctness
decryptionProofs, decrypted := make([][]byte, amount), make([]*elgamal.CipherText, amount)
for i := range shuffledC1 {
decrypted[i], decryptionProofs[i], err = sk.PartialProofDecrypt(shuffled[i], nonce)
if err != nil {
return nil, err
}
}
return &VerifiableShuffle{shuffled, decrypted, decryptionProofs, shuffleProof}, nil
}
开发者ID:confiks,项目名称:ipfs-dc,代码行数:34,代码来源:shuffler.go
示例4: ElGamalVerify
func ElGamalVerify(suite abstract.Suite, message []byte, publicKey abstract.Point,
signatureBuffer []byte, g abstract.Point) error {
// Decode the signature
buf := bytes.NewBuffer(signatureBuffer)
sig := basicSig{}
if err := abstract.Read(buf, &sig, suite); err != nil {
return err
}
r := sig.R
c := sig.C
// Compute base**(r + x*c) == T
var P, T abstract.Point
P = suite.Point()
T = suite.Point()
T.Add(T.Mul(g, r), P.Mul(publicKey, c))
// Verify that the hash based on the message and T
// matches the challange c from the signature
c = hashElGamal(suite, message, T)
if !c.Equal(sig.C) {
return errors.New("invalid signature")
}
return nil
}
开发者ID:anonyreputation,项目名称:anonCred,代码行数:27,代码来源:Util.go
示例5: NewKeyedNode
// Create new signing node that incorporates a given private key
func NewKeyedNode(hn coconet.Host, suite abstract.Suite, PrivKey abstract.Secret) *Node {
sn := &Node{Host: hn, suite: suite, PrivKey: PrivKey}
sn.PubKey = suite.Point().Mul(nil, sn.PrivKey)
sn.peerKeys = make(map[string]abstract.Point)
sn.closed = make(chan error, 20)
sn.done = make(chan int, 10)
sn.commitsDone = make(chan int, 10)
sn.viewChangeCh = make(chan string, 0)
sn.RoundCommits = make(map[int][]*SigningMessage)
sn.RoundResponses = make(map[int][]*SigningMessage)
sn.FailureRate = 0
h := fnv.New32a()
h.Write([]byte(hn.Name()))
seed := h.Sum32()
sn.Rand = rand.New(rand.NewSource(int64(seed)))
sn.Host.SetSuite(suite)
sn.VoteLog = NewVoteLog()
sn.Actions = make(map[int][]*Vote)
sn.RoundsPerView = 0
sn.Rounds = make(map[int]Round)
sn.MaxWait = 50 * time.Second
return sn
}
开发者ID:mlncn,项目名称:cothority,代码行数:28,代码来源:nodehelper.go
示例6: Decrypt
// Decrypt a message encrypted for a particular anonymity set.
// Returns the cleartext message on success, or an error on failure.
//
// The caller provides the anonymity set for which the message is intended,
// and the private key corresponding to one of the public keys in the set.
// Decrypt verifies that the message is encrypted correctly for this set -
// in particular, that it could be decrypted by ALL of the listed members -
// before returning successfully with the decrypted message.
// This verification ensures that a malicious sender
// cannot de-anonymize a receiver by constructing a ciphertext incorrectly
// so as to be decryptable by only some members of the set.
// As a side-effect, this verification also ensures plaintext-awareness:
// that is, it is infeasible for a sender to construct any ciphertext
// that will be accepted by the receiver without knowing the plaintext.
//
func Decrypt(suite abstract.Suite, ciphertext []byte, anonymitySet Set,
mine int, privateKey abstract.Secret, hide bool) ([]byte, error) {
// Decrypt and check the encrypted key-header.
xb, hdrlen, err := decryptKey(suite, ciphertext, anonymitySet,
mine, privateKey, hide)
if err != nil {
return nil, err
}
// Determine the message layout
cipher := suite.Cipher(xb)
maclen := cipher.KeySize()
if len(ciphertext) < hdrlen+maclen {
return nil, errors.New("ciphertext too short")
}
hdrhi := hdrlen
msghi := len(ciphertext) - maclen
// Decrypt the message and check the MAC
ctx := ciphertext[hdrhi:msghi]
mac := ciphertext[msghi:]
msg := make([]byte, len(ctx))
cipher.Message(msg, ctx, ctx)
cipher.Partial(mac, mac, nil)
if subtle.ConstantTimeAllEq(mac, 0) == 0 {
return nil, errors.New("invalid ciphertext: failed MAC check")
}
return msg, nil
}
开发者ID:Liamsi,项目名称:crypto,代码行数:45,代码来源:enc.go
示例7: verifyMessage
func verifyMessage(suite abstract.Suite, m interface{}, hash1 []byte) error {
// Make a copy of the signature
x := reflect.ValueOf(m).Elem().FieldByName("Sig")
sig := reflect.New(x.Type()).Elem()
sig.Set(x)
// Reset signature field
reflect.ValueOf(m).Elem().FieldByName("Sig").Set(reflect.ValueOf(crypto.SchnorrSig{})) // XXX: hack
// Marshal ...
mb, err := network.MarshalRegisteredType(m)
if err != nil {
return err
}
// ... and hash message
hash2, err := crypto.HashBytes(suite.Hash(), mb)
if err != nil {
return err
}
// Copy back original signature
reflect.ValueOf(m).Elem().FieldByName("Sig").Set(sig) // XXX: hack
// Compare hashes
if !bytes.Equal(hash1, hash2) {
return errors.New("Message has a different hash than the given one")
}
return nil
}
开发者ID:dedis,项目名称:cothority,代码行数:32,代码来源:randhound.go
示例8: NewNode
func NewNode(hn coconet.Host, suite abstract.Suite, random cipher.Stream) *Node {
sn := &Node{Host: hn, suite: suite}
msgSuite = suite
sn.PrivKey = suite.Secret().Pick(random)
sn.PubKey = suite.Point().Mul(nil, sn.PrivKey)
sn.peerKeys = make(map[string]abstract.Point)
sn.Rounds = make(map[int]*Round)
sn.closed = make(chan error, 20)
sn.done = make(chan int, 10)
sn.commitsDone = make(chan int, 10)
sn.viewChangeCh = make(chan string, 0)
sn.FailureRate = 0
h := fnv.New32a()
h.Write([]byte(hn.Name()))
seed := h.Sum32()
sn.Rand = rand.New(rand.NewSource(int64(seed)))
sn.Host.SetSuite(suite)
sn.VoteLog = NewVoteLog()
sn.Actions = make(map[int][]*Vote)
sn.RoundsPerView = 100
return sn
}
开发者ID:ineiti,项目名称:prifi,代码行数:25,代码来源:signingNode.go
示例9: MerkleGet
// Retrieve an object in a Merkle tree,
// validating the entire path in the process.
// Returns a slice of a buffer obtained from HashGet.Get(),
// which might be shared and should be considered read-only.
func MerkleGet(suite abstract.Suite, root []byte, path MerklePath,
ctx HashGet) ([]byte, error) {
// Follow pointers through intermediate levels
blob := root
for i := range path.Ptr {
beg := path.Ptr[i]
end := beg + suite.HashLen()
if end > len(blob) {
return nil, errors.New("bad Merkle tree pointer offset")
}
id := HashId(blob[beg:end])
b, e := ctx.Get(id) // Lookup the next-level blob
if e != nil {
return nil, e
}
blob = b
}
// Validate and extract the actual object
beg := path.Ofs
end := beg + path.Len
if end > len(blob) {
return nil, errors.New("bad Merkle tree object offset/length")
}
return blob[beg:end], nil
}
开发者ID:ineiti,项目名称:prifi,代码行数:31,代码来源:merkle.go
示例10: NewFile
func NewFile(suite abstract.Suite, path string) (*File, error) {
f, err := os.Open(path)
if err != nil {
log.Fatal("Failed opening file", path, err)
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
return nil, err
}
blocks := (fi.Size() + BlockSize - 1) / BlockSize
x := &File{
Name: path,
Hashes: make(map[string]int64, blocks),
}
for i := 0; int64(i) < blocks; i++ {
tmp := make([]byte, BlockSize)
_, err := f.Read(tmp)
if err != nil {
log.Fatal("Failed reading file", err)
}
h := suite.Hash()
h.Write(tmp)
x.Hashes[string(h.Sum(nil))] = int64((i * BlockSize))
}
return x, nil
}
开发者ID:Xyroe,项目名称:riffle,代码行数:31,代码来源:utils.go
示例11: DefaultConstructors
// DefaultConstructors gives a default constructor for protobuf out of the global suite
func DefaultConstructors(suite abstract.Suite) protobuf.Constructors {
constructors := make(protobuf.Constructors)
var point abstract.Point
var secret abstract.Scalar
constructors[reflect.TypeOf(&point).Elem()] = func() interface{} { return suite.Point() }
constructors[reflect.TypeOf(&secret).Elem()] = func() interface{} { return suite.Scalar() }
return constructors
}
开发者ID:nikirill,项目名称:cothority,代码行数:9,代码来源:encoding.go
示例12: newHashProver
func newHashProver(suite abstract.Suite, protoName string,
rand abstract.Cipher) *hashProver {
var sc hashProver
sc.suite = suite
sc.pubrand = suite.Cipher([]byte(protoName))
sc.prirand = rand
return &sc
}
开发者ID:LegoShrimp,项目名称:crypto,代码行数:8,代码来源:hash.go
示例13: ElGamalDecrypt
func ElGamalDecrypt(suite abstract.Suite, prikey abstract.Secret, K, C abstract.Point) (
M abstract.Point) {
// ElGamal-decrypt the ciphertext (K,C) to reproduce the message.
S := suite.Point().Mul(K, prikey) // regenerate shared secret
M = suite.Point().Sub(C, S) // use to un-blind the message
return
}
开发者ID:anonyreputation,项目名称:anonCred,代码行数:8,代码来源:Util.go
示例14: VerifySignature
// VerifySignature verifies if the challenge and the secret (from the response phase) form a
// correct signature for this message using the aggregated public key.
func VerifySignature(suite abstract.Suite, msg []byte, public abstract.Point, challenge, secret abstract.Scalar) error {
// recompute the challenge and check if it is the same
commitment := suite.Point()
commitment = commitment.Add(commitment.Mul(nil, secret), suite.Point().Mul(public, challenge))
return verifyCommitment(suite, msg, commitment, challenge)
}
开发者ID:dedis,项目名称:cothority,代码行数:10,代码来源:cosi.go
示例15: ElGamalDecrypt
func ElGamalDecrypt(suite abstract.Suite, prikey abstract.Secret, K, C abstract.Point) (
message []byte, err error) {
// ElGamal-decrypt the ciphertext (K,C) to reproduce the message.
S := suite.Point().Mul(K, prikey) // regenerate shared secret
M := suite.Point().Sub(C, S) // use to un-blind the message
message, err = M.Data() // extract the embedded data
return
}
开发者ID:Liamsi,项目名称:crypto,代码行数:9,代码来源:enc_test.go
示例16: ReadSecretHex
// Read a secret in hexadceimal from string
func ReadSecretHex(suite abstract.Suite, str string) (abstract.Secret, error) {
enc, err := hex.DecodeString(str)
if err != nil {
return nil, err
}
sec := suite.Secret()
err = sec.UnmarshalBinary(enc)
return sec, err
}
开发者ID:mlncn,项目名称:cothority,代码行数:10,代码来源:key.go
示例17: ServerGenerateResponse
/* The servergenerateresponse function is fairly self explanatory - this function provides an answer
to the challenge message provided by the user. */
func ServerGenerateResponse(suite abstract.Suite, challenge WISchnorrChallengeMessage, privateParameters WISchnorrBlindPrivateParams, privKey SchnorrKeyset) WISchnorrResponseMessage {
c := suite.Secret()
c.Sub(challenge.E, privateParameters.D)
r := suite.Secret()
r.Mul(c, privKey.X).Sub(privateParameters.U, r)
return WISchnorrResponseMessage{r, c, privateParameters.S, privateParameters.D}
}
开发者ID:diagprov,项目名称:interview-go-multisigs,代码行数:11,代码来源:partialBlind.go
示例18: ReadScalarHex
// ReadScalarHex reads a scalar in hexadecimal from string
func ReadScalarHex(suite abstract.Suite, str string) (abstract.Scalar, error) {
enc, err := hex.DecodeString(str)
if err != nil {
return nil, err
}
s := suite.Scalar()
err = s.UnmarshalBinary(enc)
return s, err
}
开发者ID:nikirill,项目名称:cothority,代码行数:10,代码来源:key.go
示例19: ReadPubHex
// ReadPubHex reads a hexadecimal representation of a public point and convert it to the
// right struct
func ReadPubHex(suite abstract.Suite, s string) (abstract.Point, error) {
encoded, err := hex.DecodeString(s)
if err != nil {
return nil, err
}
point := suite.Point()
err = point.UnmarshalBinary(encoded)
return point, err
}
开发者ID:nikirill,项目名称:cothority,代码行数:11,代码来源:key.go
示例20: GenKeys
// generate keys for the tree
func (t *Tree) GenKeys(suite abstract.Suite, rand abstract.Cipher) {
t.TraverseTree(func(t *Tree) {
PrivKey := suite.Secret().Pick(rand)
PubKey := suite.Point().Mul(nil, PrivKey)
prk, _ := PrivKey.MarshalBinary()
pbk, _ := PubKey.MarshalBinary()
t.PriKey = string(hex.EncodeToString(prk))
t.PubKey = string(hex.EncodeToString(pbk))
})
}
开发者ID:Liamsi,项目名称:cothority,代码行数:11,代码来源:tree.go
注:本文中的github.com/dedis/crypto/abstract.Suite类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论