aboutsummaryrefslogtreecommitdiff
path: root/extension/lib/wallet/emscriptif.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-02-18 22:50:17 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-02-18 22:50:27 +0100
commit079e764ae6f827b1fa7c12b26f370199fc5e4d48 (patch)
treee938a0868edfaa7bfc7d38b92ed26e978446f142 /extension/lib/wallet/emscriptif.ts
parent0f607edbb2146ff82f9dcd71a1fe2905630c0d58 (diff)
downloadwallet-core-079e764ae6f827b1fa7c12b26f370199fc5e4d48.tar.xz
fix #4121 and #4115
Diffstat (limited to 'extension/lib/wallet/emscriptif.ts')
-rw-r--r--extension/lib/wallet/emscriptif.ts70
1 files changed, 64 insertions, 6 deletions
diff --git a/extension/lib/wallet/emscriptif.ts b/extension/lib/wallet/emscriptif.ts
index b11d845f0..690800e2f 100644
--- a/extension/lib/wallet/emscriptif.ts
+++ b/extension/lib/wallet/emscriptif.ts
@@ -89,6 +89,9 @@ var emsc = {
eddsa_sign: getEmsc('GNUNET_CRYPTO_eddsa_sign',
'number',
['number', 'number', 'number']),
+ eddsa_verify: getEmsc('GNUNET_CRYPTO_eddsa_verify',
+ 'number',
+ ['number', 'number', 'number', 'number']),
hash_create_random: getEmsc('GNUNET_CRYPTO_hash_create_random',
'void',
['number', 'number']),
@@ -144,9 +147,10 @@ var emscAlloc = {
};
-enum SignaturePurpose {
+export enum SignaturePurpose {
RESERVE_WITHDRAW = 1200,
WALLET_COIN_DEPOSIT = 1201,
+ MASTER_DENOMINATION_KEY_VALIDITY = 1025,
}
enum RandomQuality {
@@ -336,11 +340,11 @@ export class Amount extends ArenaObject {
return emsc.get_fraction(this.nativePtr);
}
- get currency() {
+ get currency(): String {
return emsc.get_currency(this.nativePtr);
}
- toJson() {
+ toJson(): AmountJson {
return {
value: emsc.get_value(this.nativePtr),
fraction: emsc.get_fraction(this.nativePtr),
@@ -351,7 +355,7 @@ export class Amount extends ArenaObject {
/**
* Add an amount to this amount.
*/
- add(a) {
+ add(a: Amount) {
let res = emsc.amount_add(this.nativePtr, a.nativePtr, this.nativePtr);
if (res < 1) {
// Overflow
@@ -363,7 +367,7 @@ export class Amount extends ArenaObject {
/**
* Perform saturating subtraction on amounts.
*/
- sub(a) {
+ sub(a: Amount) {
// this = this - a
let res = emsc.amount_subtract(this.nativePtr, this.nativePtr, a.nativePtr);
if (res == 0) {
@@ -376,7 +380,7 @@ export class Amount extends ArenaObject {
throw Error("Incompatible currencies");
}
- cmp(a) {
+ cmp(a: Amount) {
return emsc.amount_cmp(this.nativePtr, a.nativePtr);
}
@@ -848,6 +852,44 @@ export class DepositRequestPS extends SignatureStruct {
}
}
+export interface DenominationKeyValidityPS_args {
+ master: EddsaPublicKey;
+ start: AbsoluteTimeNbo;
+ expire_withdraw: AbsoluteTimeNbo;
+ expire_spend: AbsoluteTimeNbo;
+ expire_legal: AbsoluteTimeNbo;
+ value: AmountNbo;
+ fee_withdraw: AmountNbo;
+ fee_deposit: AmountNbo;
+ fee_refresh: AmountNbo;
+ denom_hash: HashCode;
+}
+
+export class DenominationKeyValidityPS extends SignatureStruct {
+ constructor(w: DenominationKeyValidityPS_args) {
+ super(w);
+ }
+
+ purpose() {
+ return SignaturePurpose.MASTER_DENOMINATION_KEY_VALIDITY;
+ }
+
+ fieldTypes() {
+ return [
+ ["master", EddsaPublicKey],
+ ["start", AbsoluteTimeNbo],
+ ["expire_withdraw", AbsoluteTimeNbo],
+ ["expire_spend", AbsoluteTimeNbo],
+ ["expire_legal", AbsoluteTimeNbo],
+ ["value", AmountNbo],
+ ["fee_withdraw", AmountNbo],
+ ["fee_deposit", AmountNbo],
+ ["fee_refresh", AmountNbo],
+ ["denom_hash", HashCode]
+ ];
+ }
+}
+
interface Encodeable {
encode(arena?: Arena): ByteArray;
@@ -932,6 +974,22 @@ export function eddsaSign(purpose: EccSignaturePurpose,
}
+export function eddsaVerify(purposeNum: number,
+ verify: EccSignaturePurpose,
+ sig: EddsaSignature,
+ pub: EddsaPublicKey,
+ a?: Arena): boolean {
+ let r = emsc.eddsa_verify(purposeNum,
+ verify.nativePtr,
+ sig.nativePtr,
+ pub.nativePtr);
+ if (r === GNUNET_OK) {
+ return true;
+ }
+ return false;
+}
+
+
export function rsaUnblind(sig: RsaSignature,
bk: RsaBlindingKey,
pk: RsaPublicKey,