The ToolSign is designed to provide Cellframe Tool Sign functional for Java IDE’s.
With the CellframeSDK.jar
library you can:
- Create a Cellframe wallet
- Restore a wallet from file
- Sign pre-composed transaction from JSON file
Download library here.
In the end of the article the Usage Example is placed.
MODULES
The structure of library is represented in the following modules:
CRYPTO
DATUM
UTILS
WALLET
CLASSES
Class EncKey
This class represents encryption key.
Methods:
Get encryption key from seed phrase
public static EncKey fromSeed(EncKeyType signType, String seed)
---
Return: EncKey object
Arguments:
EncKeyType signType
: type of a signatureString seed
: seed phrase
Description: method takes signature type and seed phrase and returns EncKey object.
Class EncKeyType enum
This class represents different encryption types and contains the following values:
INVALID(-1, "invalid"),
NULL(0, "null"),
IAES(0, "iaes"),
OAES(1, "oaes"),
BF_CBC(2, "bf_cbc"),
BF_OFB(3, "bf_ofb"),
GOST_OFB(4, "gost_ofb"),
KUZN_OFB(5, "kuzn_ofb"),
SALSA2012(6, "salsa2012"),
SEED_OFB(7, "seed_ofb"),
RLWE_NEWHOPE_CPA_KEM(8, "rlwe_newhope_cpa_kem"),
MSRLN(11, "msrln"),
RLWE_MSRLN16(12, "rlwe_msrln16"),
RLWE_BCNS15(13, "rlwe_bcns15"),
LWE_FRODO(14, "lwe_frodo"),
CODE_MCBITS(15, "code_mcbits"),
NTRU(16, "ntru"),
MLWE_KYBER(17, "mlwe_kyber"),
SIG_PICNIC(18, "sig_picnic"),
SIG_BLISS(19, "sig_bliss"),
SIG_TESLA(20, "sig_tesla"),
SIG_DILITHIUM(21, "sig_dilithium"),
SIG_RINGCT20(22, "sig_ringct20"),
KEM_KYBER512(23, "kem_kyber512"),
SIG_FALCON(24, "sig_falcon"),
SIG_SPHINCSPLUS(25, "sig_sphincsplus"),
SIG_ECDSA(26, "sig_ecdsa"),
SIG_SHIPOVNIK(27, "sig_shipovnik"),
SIG_MULTI_CHAINED(100, "sig_multi_chained"),
PQLR_SIG_DILITHIUM(1021, "pqlr_sig_dilithium"),
PQLR_SIG_FALCON(1024, "pqlr_sig_falcon"),
PQLR_SIG_SPHINCS(1025, "pqlr_sig_sphincs"),
PQLR_KEM_SABER(1051, "pqlr_kem_saber"),
PQLR_KEM_MCELIECE(1052, "pqlr_kem_mceliece"),
PQLR_KEM_NEWHOPE(1058, "pqlr_kem_newhope");
Every encryption type has:
code(int)
- code numbervalue (String)
- name
Methods:
Get encryption type code
public int getCode()
---
Return: integer
Arguments:
none
Description: method gets the code of this encryption type.
Get encryption type name
public String getValue()
---
Return: String
Arguments:
none
Description: method gets the name of this encryption type.
Create encryption type from code
public static EncKeyType fromCode(int code)
---
Return: EncKeyType object
Arguments:
int code
: code number of encryption type.
Description: method creates EncKeyType
object from code number.
Create encryption type from name
public static EncKeyType fromString(String text)
---
Return: EncKeyType object
Arguments:
String text
: name of the encryption type.
Description: method creates an EncKeyType
object from code number.
Class Signer
This class serves as a datum signer.
Methods:
Sign transaction datum
public Tx signDatumTx(Tx datumTx)
---
Return: Tx object
Arguments:
Tx datumTx
: a transaction datum object for signing
Description: method takes a transaction datum and sings it.
Class Tx
This class represents a transaction.
Methods:
Transform String to JSON
public String toJson()
---
Return: JSON object
Arguments:
none
Description: method transforms String to JSON object.
Get Tx object from JSON
public static Tx fromJson(String json)
---
Return: Tx object
Arguments:
String json
: a string containing JSON.
Description: method transforms JSON string into transaction object.
Class NetID
This class represents network ID.
Methods:
Get Net ID from hash (HEX)
public static NetID fromHex(String netIdHex)
---
Return: NetID object
Arguments:
String netIdHex
: Net ID in the HEX format.
Net ID’s:
Backbone - 0x0404202200000000
KelVPN - 0x1807202300000000
Description: method forms NetID object from the Net ID hash.
Get Net ID from long integer
public static NetID fromLong(long netId)
---
Return: NetID object
Arguments:
long netId
: Net ID in the long integer format.
Description: method forms NetID object from the long integer Net ID.
Class Helpers
This is a utility helper class that contains methods for working with various data types.
Methods:
Transfrom net ID from HEX to Long
public static long netIdHexToLong(String netId)
---
Return: long integer
Arguments:
String netId
: net ID in the HEX format
Description: method transforms Net ID represented in the HEX format into the number.
Class NativeLibraryLoader
This class is designed to dynamically load native SDK libraries into a Java application.
Class Wallet
This class is designed to interact with wallet.
Methods:
Get wallet from.dwallet file
public static Wallet fromFile(File file)
---
Return: Wallet object
Arguments:
File file
: file.dwallet
containing existing wallet.
Description: method creates wallet from the .dwallet
file.
Get protected wallet from.dwallet file
public static Wallet fromFile(File file, String password)
---
Return: Wallet object
Arguments:
File file
: file.dwallet
containing existing wallet.String password
: wallet password.
Description: method creates wallet from the .dwallet
file.
Create protected wallet with seed-phrase
public static Wallet create(Path path, String name, WalletType signType, String password, String seed)
---
Return: Wallet object
Arguments:
Path path
: a path, where a wallet will be created.String name
: name of the wallet.WalletType signType
: signature typeSIG_DIL
orSIG_FALCON
.String password
: password.String seed
: 24 words seed phrase.
Description: method creates wallet
protected by both password
and seed
phrase.
Create unprotected wallet
public static Wallet create(Path path, String name, WalletType signType)
---
Return: Wallet object
Arguments:
Path path
: a path, where a wallet will be created.String name
: name of the wallet.WalletType signType
: signature typeSIG_DIL
orSIG_FALCON
.
Description: method creates wallet
.
Create protected wallet
public static Wallet create(Path path, String name, WalletType signType, String password)
---
Return: Wallet object
Arguments:
Path path
: a path, where a wallet will be created.String name
: name of the wallet.WalletType signType
: signature typeSIG_DIL
orSIG_FALCON
.String password
: password.
Description: method creates a wallet
protected by password.
Get wallet address
public WalletAddress getAddress(NetID netId)
---
Return: WalletAddress object
Arguments:
NetID netId
: a NetID object
Description: method gets the wallet
address using network ID
.
Get number of certificates
public int getCertsNumber()
---
Return: int
Arguments:
none
Description: method gets certificate number of this wallet.
Get wallet encryption key
public EncKey getEncKey()
---
Return: EncKey OBJECT
Arguments:
none
Description: method gets encryption key EncKey of this wallet.
Class WalletType enum
This class contains types of wallet protection.
Two type values:
SIG_DIL("sig_dil")
SIG_FALCON("sig_falcon")
Get wallet type
public String getValue()
---
Return: String
Arguments:
none
Description: method gets wallet protection type sig_dil
or sig_falcon
.
Get wallet type from text
public static WalletType fromString(String text)
---
Return: WalletType object
Arguments:
String text
: protection type of the wallet.
Description: method creates a WalletType
object from the text.
Class WalletAddress
This class represents a wallet address.
Transform wallet address to string
public String toString()
---
Return: String
Arguments:
none
Description: transforms this wallet address
to string.
Usage Example
The following snippet shows how to create a wallet, get its address, get JSON from a file, turn it into a transaction, sign it with an existing wallet and turn it back to a JSON file.
// creation of the wallet object WAL named "wallettest" with SIG_DIL protection type and "12345" password
Wallet WAL = Wallet.create(Paths.get("./"), "wallettest", Wallet.WalletType.SIG_DIL, "12345");
// get network ID from the network hash (Backbone)
NetID networkID = NetID.fromHex("0x0404202200000000");
// get wallet address of the created wallet (WAL)
WalletAddress getAddr = WAL.getAddress(networkID);
// wallet(WAL) address print in console
System.out.printf(getAddr.toString());
// work with files input/output
try {
// get path of the "jsonIN.txt" file with transaction
Path path = Paths.get("jsonIN.txt");
// reading JSON object from file into string variable
String jsonIN = Files.readString(path);
// print initial JSON
System.out.println(jsonIN);
// create a transaction object from initial JSON
Tx TX = Tx.fromJson(jsonIN);
// get encryption key of the wallet WAL
EncKey key = WAL.getEncKey();
// create signer object containing previously gained encryption key
Signer signer = new Signer(key);
// sign transaction datum using encryption key of the WAL wallet
Tx signedTX = signer.signDatumTx(TX);
// print signed JSON in console (now JSON must contain signature)
System.out.println(signedTX.toJson());
// get file object "walletfile" from file "CELLWALLET.dwallet"
File walletfile = new File("CELLWALLET.dwallet");
// create wallet object WAL2 from file "walletfile"
Wallet WAL2 = Wallet.fromFile(walletfile);
// get wallet address of the WAL2 using previously gained network ID (Backbone)
WalletAddress getAddr2 = WAL2.getAddress(networkID);
// print wallet address of the WAL2 wallet
System.out.printf(getAddr2.toString());
}catch (IOException e) { e.printStackTrace();}