Skip to main content

Zenon Cryptography

Wallet

The wallet data is stored inside a KeyStore. AES-256-GCM for symmetric encryption. Argon2.IDkey as Key Derivation Function

  • time: 1
  • memory: 64 * 1024
  • threads: 4
  • key_length: 32

An encrypted KeyStore is referred to as KeyVault.

KeyVault example

{
"baseAddress":"z1qqjnwjjpnue8xmmpanz6csze6tcmtzzdtfsww7",
"crypto":{
"argon2Params": {
"salt":"0x1563f86f7afa59dd0be150ffeac10896"
},
"cipherData":"0xe81dbb96f5b9839f3741ceff8362e1ebf09e05a8311354658ddf979577ffd0dd34df55757d1fd37e677e3ae7d055b2ed",
"cipherName":"aes-256-gcm",
"kdf":"argon2.IDKey",
"nonce":"0xb7cc39120d5b87a3b7af58b7"
},
"timestamp":1633548746,
"version":1
}

Digital Signing Algorithm

Ed25519 is a deterministic signature scheme using curve25519

Key derivation

Ed25519 which is compatible with BIP44

  • key parameter: ed25519 seed
  • hardened offset: 0x80000000

BIP44 format

m / purpose' / coin_type' / account' / change / address_index

Alphanet (Network of Momentum Phase 0) uses coin_type value 73404


Alphanet Address Format

bech32

  • human readable part: z

data

  • user account prefix byte: 0
  • embedded contract prefix byte: 1
  • core: first 19 bytes of sha3(pubKey) address: bech32(hrp, data)

Example

Entropy

bc827d0a00a72354dce4c44a59485288500b49382f9ba88a016351787b7b15ca

Mnemonic

route become dream access impulse price inform obtain engage ski believe awful absent pig thing vibrant possible exotic flee pepper marble rural fire fancy

BIP44 path

m/44'/73404'/0'

Private key

d6b01f96b566d7df9b5b53b1971e4baeb74cc64167a9843f82d04b2194ca4863

Public key

3e13d7238d0e768a567dce84b54915f2323f2dcd0ef9a716d9c61abed631ba10

User prefix byte

00

Core bytes

25374a419f32736f61ecc5ac4059d2f1b5884d

Address

z1qqjnwjjpnue8xmmpanz6csze6tcmtzzdtfsww7

Zenon Dart SDK example

Code

import 'package:hex/hex.dart';
import 'package:znn_sdk_dart/znn_sdk_dart.dart';

Future<void> main() async {
final mnemonic =
'route become dream access impulse price inform obtain engage ski believe awful absent pig thing vibrant possible exotic flee pepper marble rural fire fancy';

var keyStore = KeyStore.fromMnemonic(mnemonic);
var keyPair = keyStore.getKeyPair(0);
var privateKey = keyPair.getPrivateKey();
var publicKey = await keyPair.getPublicKey();
var address = await keyPair.address;

print('Entropy: \n${keyStore.entropy}\n');
print('Mnemonic: \n${keyStore.mnemonic}\n');
print('BIP44 path: \n${Derivation.getDerivationAccount(0)}\n');
print('Private key: \n${HEX.encode(privateKey!)}\n');
print('Public key: \n${HEX.encode(publicKey!)}\n');
print('User & Core bytes: \n${HEX.encode(address!.core!)}\n');
print('Address: \n$address');
}

Output

Entropy:
bc827d0a00a72354dce4c44a59485288500b49382f9ba88a016351787b7b15ca

Mnemonic:
route become dream access impulse price inform obtain engage ski believe awful absent pig thing vibrant possible exotic flee pepper marble rural fire fancy

BIP44 path:
m/44'/73404'/0'

Private key:
d6b01f96b566d7df9b5b53b1971e4baeb74cc64167a9843f82d04b2194ca4863

Public key:
3e13d7238d0e768a567dce84b54915f2323f2dcd0ef9a716d9c61abed631ba10

User & Core bytes:
0025374a419f32736f61ecc5ac4059d2f1b5884d

Address:
z1qqjnwjjpnue8xmmpanz6csze6tcmtzzdtfsww7