2022-09-07 15:15:43 -04:00
|
|
|
package rln
|
|
|
|
|
2023-04-03 17:38:39 -04:00
|
|
|
import (
|
|
|
|
"encoding/hex"
|
|
|
|
)
|
2022-09-07 15:15:43 -04:00
|
|
|
|
2023-04-03 17:38:39 -04:00
|
|
|
func ToIdentityCredentials(groupKeys [][]string) ([]IdentityCredential, error) {
|
2022-09-07 15:15:43 -04:00
|
|
|
// groupKeys is sequence of membership key tuples in the form of (identity key, identity commitment) all in the hexadecimal format
|
2023-04-03 17:38:39 -04:00
|
|
|
// the toIdentityCredentials proc populates a sequence of IdentityCredentials using the supplied groupKeys
|
|
|
|
// Returns an error if the conversion fails
|
2022-09-07 15:15:43 -04:00
|
|
|
|
2023-04-03 17:38:39 -04:00
|
|
|
var groupIdCredentials []IdentityCredential
|
|
|
|
|
|
|
|
for _, gk := range groupKeys {
|
|
|
|
idTrapdoor, err := ToBytes32LE(gk[0])
|
2022-09-07 15:15:43 -04:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2023-04-03 17:38:39 -04:00
|
|
|
|
|
|
|
idNullifier, err := ToBytes32LE(gk[1])
|
2022-09-07 15:15:43 -04:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2023-04-03 17:38:39 -04:00
|
|
|
idSecretHash, err := ToBytes32LE(gk[2])
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
idCommitment, err := ToBytes32LE(gk[3])
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
groupIdCredentials = append(groupIdCredentials, IdentityCredential{
|
|
|
|
IDTrapdoor: idTrapdoor,
|
|
|
|
IDNullifier: idNullifier,
|
|
|
|
IDSecretHash: idSecretHash,
|
|
|
|
IDCommitment: idCommitment,
|
|
|
|
})
|
2022-09-07 15:15:43 -04:00
|
|
|
}
|
|
|
|
|
2023-04-03 17:38:39 -04:00
|
|
|
return groupIdCredentials, nil
|
2022-09-07 15:15:43 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func Bytes32(b []byte) [32]byte {
|
|
|
|
var result [32]byte
|
2022-10-05 17:29:38 -04:00
|
|
|
copy(result[32-len(b):], b)
|
2022-09-07 15:15:43 -04:00
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
2022-10-05 17:29:38 -04:00
|
|
|
func Bytes128(b []byte) [128]byte {
|
|
|
|
var result [128]byte
|
|
|
|
copy(result[128-len(b):], b)
|
2022-09-07 15:15:43 -04:00
|
|
|
return result
|
|
|
|
}
|
2023-04-03 17:38:39 -04:00
|
|
|
|
|
|
|
func ToBytes32LE(hexStr string) ([32]byte, error) {
|
|
|
|
|
|
|
|
b, err := hex.DecodeString(hexStr)
|
|
|
|
if err != nil {
|
|
|
|
return [32]byte{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < len(b)/2; i++ {
|
|
|
|
b[i], b[len(b)-i-1] = b[len(b)-i-1], b[i]
|
|
|
|
}
|
|
|
|
|
|
|
|
return Bytes32(b), nil
|
|
|
|
}
|