cryptoSignOpen function
Implementation
int cryptoSignOpen(
Uint8List m, Uint8List sm, int n, Uint8List pk, String hashMode) {
var tweetNacl = tweet_nacl.TweetNaCl();
int i;
var t = Uint8List(32);
var h = Uint8List(64);
var p = [gf(), gf(), gf(), gf()];
var q = [gf(), gf(), gf(), gf()];
if (64 > n) {
return -1;
}
if (tweet_nacl.TweetNaCl.unpackneg(q, pk) != 0) {
return -1;
}
for (i = 0; i < n; i++) {
m[i] = sm[i];
}
for (i = 0; 32 > i; i++) {
m[i + 32] = pk[i];
}
crypto_hash(h, m, n, hashMode);
tweet_nacl.TweetNaCl.reduce(h);
tweetNacl.scalarmult(p, q, h, 0);
tweet_nacl.TweetNaCl.scalarbase(q, sm.sublist(32, sm.length), 0);
tweet_nacl.TweetNaCl.add(p, q);
tweetNacl.pack(t, p);
n -= 64;
var longArr = Uint8List(sm.length);
for (var k = 0; k < longArr.length; k++) {
longArr[k] = sm[k];
}
if (tweet_nacl.TweetNaCl.crypto_verify_32(longArr, t) != 0) {
for (i = 0; i < n; i++) {
m[i] = 0;
}
return -1;
}
for (var k = 0; k < longArr.length; k++) {
sm[k] = longArr[k];
}
for (i = 0; i < n; i++) {
m[i] = sm[i + 64];
}
return n;
}