API C/C++
HSM Dinamo
Carregando...
Procurando...
Nenhuma entrada encontrado
Blockchain

Descrição detalhada

Operações de suporte à segurança de estruturas baseadas em Blockchain.

As APIs do módulo Blockchain são destinadas às operações específicas para processamento de criptografia de redes blockchain e especificações BIP, EIP e SLIP.

A assinatura ECDSA por exemplo é especializada para evitar signature malleability, com a a restrição de LOW-S.

Exemplos de operações disponíveis no módulo Blockchain:

  1. Geração de chaves Extended Private Key (XPrv) no padrão BIP32.
  1. Derivação de chaves filha (Child Key Derivation) nos padrões BIP32 e SLIP10.
  1. Recuperação de endereço.
  1. Assinaturas digitais ECDSA, nos padrões SECG strict DER (BIP62/66 e BIP 146) e Schnorr no padrão BIP340;
  1. Assinaturas digitais EdDSA curva 25519.
  1. Verificação de assinatura.
  1. Importação e exportação de chaves via diversos formatos (WIF, Hex, Sec1, Xpriv etc).
  1. Recuperação da chave pública com diversos formatos (BIP32 Xpub, Sec1 com e sem compressão, Schnorr BIP340 etc).
  1. Split e Recover de segredos com esquema M de N usando SSS (Shamir's Secret Sharing).
  1. Operações com a curva alt_bn128, de acordo com a EIP-196.
Atenção
O módulo blockchain não trata ou monta os detalhes da transação de cada rede em particular; isto deve estar a cargo da aplicação. A função do HSM é proteger a chave privada em ambiente seguro, gerar e retornar uma assinatura conforme os parâmetros passados pela aplicação chamadora.

Redes compatíveis

A seguir a lista das redes cuja criptografia é compatível com o HSM:

Observação
Os algoritmos listados são os atualmente implementados no HSM que permitem a assinatura de transações na rede e não necessariamente cobrem todas as opções definidas na especificação da rede. Em caso de dúvida sinta-se à vontade para procurar o suporte da Dinamo Networks e esclarecer suas dúvidas.
Logo Nome Símbolo Alg. Assinatura no HSM Curva Obs
Bitcoin BTC ECDSA secp256k1
Ethereum ETH ECDSA secp256k1
Tether USDT ECDSA secp256k1 token em diversas redes (ex.: Ethereum, Algorand)
Binance Coin BNB ECDSA secp256k1
image USD Coin USDC ECDSA secp256k1 token
Solana SOL EdDSA edwards25519
XRP XRP ECDSA, EdDSA secp256k1, edwards25519
Terra Classic LUNC ECDSA secp256k1
Cardano ADA EdDSA edwards25519
Avalanche AVAX ECDSA secp256k1
image Dogecoin DOGE ECDSA secp256k1
image Binance USD BUSD ECDSA secp256k1 token
Polkadot DOT ECDSA, EdDSA secp256k1, edwards25519
Shiba Inu SHIB ECDSA secp256k1 token
Wrapped Bitcoin WBTC ECDSA, EdDSA secp256k1, edwards25519 token
Polygon MATIC ECDSA secp256k1
Cronos CRO ECDSA secp256k1
Dai DAI ECDSA secp256k1 token
NEAR Protocol NEAR ECDSA secp256k1
Litecoin LTC ECDSA secp256k1
TRON TRX ECDSA secp256k1
image ApeCoin APE ECDSA secp256k1 token
Cosmos ATOM ECDSA secp256k1
Bitcoin Cash BCH ECDSA secp256k1
Algorand ALGO EdDSA edwards25519
Brazilian Digital Token BRZ ECDSA secp256k1 token
Celo Brazilian Real CREAL ECDSA secp256k1 token
Celo Dollar CUSD ECDSA secp256k1 token
Axie Infinity AXS ECDSA secp256k1 token/coin
Fantom FTM ECDSA secp256k1
Uniswap UNI ECDSA secp256k1 token
Stellar XLM EdDSA edwards25519
Tezos XTZ ECDSA, EdDSA secp256k1, edwards25519
CELO CELO ECDSA secp256k1 token/coin
image Toncoin TON EdDSA edwards25519
Chainlink LINK ECDSA secp256k1 token

A implementação do HSM está de acordo com os padrões definidos na documentação listada abaixo:

Operações de suporte à segurança de estruturas baseadas em Blockchain. Mais...

Funções

int AAP_API DBchainCreateXPrv (HSESSIONCTX hSession, BYTE bType, DWORD dwAttributes, const char *szId, const BYTE *pcbData, DWORD dwDataLen, DWORD dwReserved)
 
int AAP_API DBchainCreateBip32Ckd (HSESSIONCTX hSession, BYTE bVersion, DWORD dwIndex, DWORD dwAttributes, const char *cszPar, const char *cszDst, DN_BCHAIN_KEY_INFO *pKeyInfo, DWORD dwReserved)
 
int AAP_API DBchainGetAddress (HSESSIONCTX hSession, BYTE bType, BYTE bVer, const char *cszHrp, const char *cszPk, BYTE *pbAddress, DWORD *pdwAddressLen, DWORD dwReserved)
 
int AAP_API DBchainSignHash (HSESSIONCTX hSession, BYTE bType, BYTE bHashMode, BYTE *pbHash, DWORD dwHashLen, const char *cszPk, BYTE *pbSig, DWORD *pdwSigLen, DWORD dwReserved)
 
int AAP_API DBchainVerify (HSESSIONCTX hSession, BYTE bSigType, BYTE bHashMode, const BYTE *pbHash, DWORD dwHashLen, const BYTE *pbSig, DWORD dwSigLen, BYTE bInPbkType, const BYTE *pbInPbk, BYTE bInPbkLen, DWORD dwReserved)
 
int AAP_API DBchainEdDsaSign (HSESSIONCTX hSession, BYTE bType, const char *cszCtxStr, BYTE *pbData, DWORD dwDataLen, const char *cszPk, BYTE *pbSig, DWORD *pdwSigLen, DWORD dwReserved)
 
int AAP_API DBchainEdDsaVerify (HSESSIONCTX hSession, BYTE bType, const char *cszCtxStr, BYTE *pbData, DWORD dwDataLen, BYTE bPbkType, BYTE *pbPbk, DWORD dwPbkLen, BYTE *pbSig, DWORD dwSigLen, DWORD dwReserved)
 
int AAP_API DBchainPkImport (HSESSIONCTX hSession, BYTE bFormat, DWORD dwAttributes, const char *cszId, const BYTE *pcbData, DWORD dwDataLen, DWORD dwReserved)
 
int AAP_API DBchainPkExport (HSESSIONCTX hSession, BYTE bFormat, BYTE bVersion, BYTE bCompressed, const char *cszId, BYTE **ppbData, DWORD *pdwDataLen, DWORD dwReserved)
 
int AAP_API DBchainGetPubKey (HSESSIONCTX hSession, BYTE bType, const char *cszId, BYTE *pbData, DWORD *pdwDataLen, DWORD dwReserved)
 
int AAP_API DBchainRecoverPbkFromSignature (HSESSIONCTX hSession, BYTE bSigType, BYTE bHashMode, const BYTE *pbHash, DWORD dwHashLen, const BYTE *pbSig, DWORD dwSigLen, DN_BCHAIN_PBK *pPbk, DWORD dwReserved)
 
int AAP_API DBchainGetKeyInfo (HSESSIONCTX hSession, DWORD dwReserved, const char *cszId, void *pvData, DWORD *pdwDataLen)
 
int AAP_API DBchainHashData (HSESSIONCTX hSession, BYTE bMode, BYTE *pbData, DWORD dwDataLen, BYTE *pbHash, DWORD *pdwHashLen, DWORD dwReserved)
 
int AAP_API DBchainEd2X (HSESSIONCTX hSession, const char *cszPk, const char *cszTo, DWORD dwAttr, DWORD dwReserved)
 

Funções

◆ DBchainCreateXPrv()

int AAP_API DBchainCreateXPrv ( HSESSIONCTX hSession,
BYTE bType,
DWORD dwAttributes,
const char * szId,
const BYTE * pcbData,
DWORD dwDataLen,
DWORD dwReserved )

#include <dinamo.h>

Cria uma chave Extended Private Key (XPrv) para a blockchain no padrão BIP32.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeTipo de geração da chave.
Valor Significado
DN_BCHAIN_BTC_MINIKEY Bitcoin minikey. pcbData deve ser NULL e dwDataLen deve ser 0.
DN_BCHAIN_BIP32_SEED_XPRV BIP32 seed XPrv. pcbData deve conter a estrutura DN_BCHAIN_BIP32_SEED_XPRV_DATA preenchida.
DN_BCHAIN_BIP39_SEED_XPRV BIP39 seed XPrv. pcbData deve conter a estrutura DN_BCHAIN_BIP39_SEED_XPRV_DATA preenchida.
DN_BCHAIN_BIP32_XPRV BIP32 XPrv. dwDataLen deve ser um BYTE contendo a versão da chave. Ver anotações para mais detalhes.
DN_BCHAIN_BIP32_ED25519_XPRV BIP32 Ed25519 XPrv. dwDataLen deve ser um BYTE contendo a versão da chave. Ver anotações para mais detalhes.
[in]dwAttributesParâmetros adicionais da chave. Veja as opções na função DGenerateKey(). Esta API inclui automaticamente a flag BCHAIN_KEY, que é necessária para as operações de blockchain.
[in]szIdNome da chave no HSM. Deve ter tamanho máximo de MAX_OBJ_ID_FQN_LEN.
[in]pcbDataBuffer contendo os dados necessários para a geração da chave. Os dados de entrada devem ser passados de acordo com a opção bType e o tamanho dos dados passados aqui devem ser especificados em dwDataLen.
[in]dwDataLenTamanho dos dados passados em pcbData.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Tabela de opções de versão para a chave XPrv.
Valor Significado
DN_BCHAIN_VER_BIP32_MAINNET Mainnet BIP32.
DN_BCHAIN_VER_BIP32_TESTNET Testnet BIP32.
DN_BCHAIN_VER_BIP32_HTR_MAINNET Mainnet BIP32 Hathor.
DN_BCHAIN_VER_BIP32_HTR_TESTNET Testnet BIP32 Hathor.
Exemplos
ckd_bchain.c, get_key_info_bchain.c, get_pub_key_bchain.c, import_export_bchain.c e sign_verify_bchain.c.

◆ DBchainCreateBip32Ckd()

int AAP_API DBchainCreateBip32Ckd ( HSESSIONCTX hSession,
BYTE bVersion,
DWORD dwIndex,
DWORD dwAttributes,
const char * cszPar,
const char * cszDst,
DN_BCHAIN_KEY_INFO * pKeyInfo,
DWORD dwReserved )

#include <dinamo.h>

Faz uma operação de Child Key Derivation (CKD). Deriva uma chave Extended Private Key (XPrv) para a blockchain no padrão BIP32.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bVersionVersão da chave.
Valor Significado
DN_BCHAIN_VER_BIP32_MAINNET Mainnet BIP32.
DN_BCHAIN_VER_BIP32_TESTNET Testnet BIP32.
DN_BCHAIN_VER_BIP32_HTR_MAINNET Mainnet BIP32 Hathor.
DN_BCHAIN_VER_BIP32_HTR_TESTNET Testnet BIP32 Hathor.
[in]dwIndexÍndice da chave que será derivada. Chaves non hardened usam índice de 0 a 231-1 e chaves hardened (irrestritamente seguras) usam índices de 231 a 232-1, como especificado no padrão BIP32. É altamente recomendado gerar chaves hardened. Usar DN_BCHAIN_SECURE_BIP32_INDEX_BASE como base para gerar índices hardened (Ex. DN_BCHAIN_SECURE_BIP32_INDEX_BASE + 1 ...).
[in]dwAttributesParâmetros adicionais da chave. Veja as opções na função DGenerateKey(). Esta API inclui automaticamente a flag BCHAIN_KEY, que é necessária para as operações de blockchain.
[in]cszParNome da chave pai no HSM. Deve ter tamanho máximo de MAX_OBJ_ID_FQN_LEN. Deve ser uma chave XPrv (DN_BCHAIN_BIP32_XPRV etc.). Ver DBchainCreateXPrv().
[in]cszDstNome da chave que será derivada no HSM. Deve ter tamanho máximo de MAX_OBJ_ID_FQN_LEN.
[out]pKeyInfoPonteiro para a estrutura DN_BCHAIN_KEY_INFO que conterá as informações da chave gerada.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
ckd_bchain.c.

◆ DBchainGetAddress()

int AAP_API DBchainGetAddress ( HSESSIONCTX hSession,
BYTE bType,
BYTE bVer,
const char * cszHrp,
const char * cszPk,
BYTE * pbAddress,
DWORD * pdwAddressLen,
DWORD dwReserved )

#include <dinamo.h>

Recupera o endereço de uma chave usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeTipo do endereço a ser gerado. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_AT_BTC_P2PKH Endereço P2PKH.

bVer deve ser DN_BCHAIN_VER_BTC_A1_MAIN_NET, DN_BCHAIN_VER_BTC_A3_MAIN_NET, DN_BCHAIN_VER_BTC_AMN_TEST_NET, DN_BCHAIN_VER_HTR_MAINNET ou DN_BCHAIN_VER_HTR_TESTNET.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_BTC_P2SH Endereço P2SH BIP13.

bVer deve ser DN_BCHAIN_VER_BTC_A1_MAIN_NET, DN_BCHAIN_VER_BTC_A3_MAIN_NET, DN_BCHAIN_VER_BTC_AMN_TEST_NET, DN_BCHAIN_VER_HTR_MAINNET ou DN_BCHAIN_VER_HTR_TESTNET.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
cszPk deve ser o script-hash.
DN_BCHAIN_AT_BTC_B32_PKH Endereço BIP32 P2PKH BIP173.

bVer deve ser DN_BCHAIN_VER_BTC_B32_WITVER.
cszHrp pode ser DN_BCHAIN_HRP_BTC_MAIN_NET ou DN_BCHAIN_HRP_BTC_TEST_NET.
DN_BCHAIN_AT_BTC_B32_SH Endereço BIP32 P2SH.

bVer deve ser DN_BCHAIN_VER_BTC_A1_MAIN_NET, DN_BCHAIN_VER_BTC_A3_MAIN_NET, DN_BCHAIN_VER_BTC_AMN_TEST_NET, DN_BCHAIN_VER_HTR_MAINNET ou DN_BCHAIN_VER_HTR_TESTNET.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
cszPk deve ser o script-hash.
DN_BCHAIN_AT_ETH_EOA Endereço ETH EOA.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_ETH_EOA_MC_CKS Endereço ETH EOA MC CKS. EIP55.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_ETH_EOA_ICAP Endereço ETH EOA ICAP.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_ALGORAND Endereço Algorand.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_TRON_HEX Endereço TRON hexadecimal.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_TRON_B58 Endereço TRON Base 58.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_XRP Endereço XRP Ledger/Ripple.

bVer deve ser DN_BCHAIN_VER_XRP_CLASSIC.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
DN_BCHAIN_AT_SOL Endereço Solana.

bVer deve ser DN_BCHAIN_VER_UNUSED.
cszHrp deve ser DN_BCHAIN_HRP_UNUSED.
[in]bVerVersão do endereço.
Valor Significado
DN_BCHAIN_VER_UNUSED Parâmetro não utilizado.
DN_BCHAIN_VER_BTC_A1_MAIN_NET Bitcoin A1 mainnet.
DN_BCHAIN_VER_XRP_CLASSIC XRP Ledger/Ripple Classic.
DN_BCHAIN_VER_BTC_AMN_TEST_NET Bitcoin P2PKH testnet.
DN_BCHAIN_VER_BTC_A3_MAIN_NET Bitcoin A3 mainnet.
DN_BCHAIN_VER_BTC_B32_WITVER Bitcoin B32 witver.
DN_BCHAIN_VER_HTR_MAINNET Hathor mainnet.
DN_BCHAIN_VER_HTR_TESTNET Hathor testnet.
DN_BCHAIN_VER_HTR_P2SH_MAINNET Hathor P2SH mainnet.
DN_BCHAIN_VER_HTR_P2SH_TESTNET Hathor P2SH testnet.
[in]cszHrpHRP (Human Readable Part) da chave. Os valores da tabela são aceitos. Deve ter tamanho máximo de DN_BCHAIN_MAX_HRP.
Valor Significado
DN_BCHAIN_HRP_UNUSED Parâmetro não utilizado.
DN_BCHAIN_HRP_BTC_MAIN_NET Bitcoin mainnet.
DN_BCHAIN_HRP_BTC_TEST_NET Bitcoin testnet.
[in]cszPkChave privada que será gerado o endereço ou o script-hash. Caso use script-hash passar um buffer de tamanho MAX_OBJ_ID_FQN_LEN com script-hash com padding zero.
[in,out]pbAddressBuffer que receberá o endereço. Pode ser NULL para obter o tamanho necessário. É recomendado utilizar o tamanho máximo de DN_BCHAIN_MAX_ADDR_LEN.
[in,out]pdwAddressLenTamanho do buffer pbAddress. Caso o buffer pbAddress seja NULL, este parâmetro receberá o tamanho necessário.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
ckd_bchain.c.

◆ DBchainSignHash()

int AAP_API DBchainSignHash ( HSESSIONCTX hSession,
BYTE bType,
BYTE bHashMode,
BYTE * pbHash,
DWORD dwHashLen,
const char * cszPk,
BYTE * pbSig,
DWORD * pdwSigLen,
DWORD dwReserved )

#include <dinamo.h>

Assina um hash usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeTipo da assinatura a ser gerada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_SIG_DER_ECDSA Assinatura DER, no formato v || DER. SECG!SEC1 strict DER com low S como descrito em BIP62/66, BIP146, EIP2. Tendo 'v' o tamanho de 1 byte. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
DN_BCHAIN_SIG_RAW_ECDSA Assinatura RAW, no formato v || r || s. Tendo 'v' o tamanho de 1 byte e 'r' e 's' cada uma o tamanho de 32 bytes. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
DN_BCHAIN_SIG_BIP340 Assinatura BIP340 - Schnorr 64 bytes.
DN_BCHAIN_DER_RFC_6979_ECDSA Assinatura ECDSA determinística padrão RFC-6979. Tipo DER no formato v || DER, tendo 'v' o tamanho de 1 byte. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1
DN_BCHAIN_RAW_RFC_6979_ECDSA Assinatura ECDSA determinística padrão RFC-6979. Tipo RAW no formato v || r || s, tendo 'v' o tamanho de 1 byte e 'r' e 's' cada uma o tamanho de 32 bytes. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
[in]bHashModeTipo do hash.
Valor Significado
DN_BCHAIN_HASH_BTC_H160 Bitcoin H160.
DN_BCHAIN_HASH_RIPEMD160 RIPEMD160.
DN_BCHAIN_HASH_SHA256 SHA256
DN_BCHAIN_HASH_BTC_SHA256_2X Bitcoin SHA256 2x.
DN_BCHAIN_HASH_KECCAK256 KECCAK256.
[in]pbHashHash calculado de acordo com o informado em bHashMode.
[in]dwHashLenTamanho do hash informado em pbHash.
[in]cszPkNome da chave privada.
[in,out]pbSigBuffer que receberá a assinatura.Pode ser NULL para obter o tamanho necessário.É recomendado utilizar o tamanho máximo de DN_BCHAIN_MAX_SIG_LEN.
[in,out]pdwSigLenTamanho do buffer pbSig.Caso o buffer pbSig seja NULL, este parâmetro receberá o tamanho necessário.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
sign_verify_bchain.c.

◆ DBchainVerify()

int AAP_API DBchainVerify ( HSESSIONCTX hSession,
BYTE bSigType,
BYTE bHashMode,
const BYTE * pbHash,
DWORD dwHashLen,
const BYTE * pbSig,
DWORD dwSigLen,
BYTE bInPbkType,
const BYTE * pbInPbk,
BYTE bInPbkLen,
DWORD dwReserved )

#include <dinamo.h>

Verifica uma assinatura usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bSigTypeTipo da assinatura a ser gerada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_SIG_DER_ECDSA Assinatura DER, no formato v || DER. SECG!SEC1 strict DER com low S como descrito em BIP62/66, BIP146, EIP2. Tendo 'v' o tamanho de 1 byte. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
DN_BCHAIN_SIG_RAW_ECDSA Assinatura RAW, no formato v || r || s. Tendo 'v' o tamanho de 1 byte e 'r' e 's' cada uma o tamanho de 32 bytes. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
DN_BCHAIN_SIG_BIP340 Assinatura BIP340 - Schnorr 64 bytes.
[in]bHashModeTipo do hash.
Valor Significado
DN_BCHAIN_HASH_BTC_H160 Bitcoin H160.
DN_BCHAIN_HASH_RIPEMD160 RIPEMD160.
DN_BCHAIN_HASH_SHA256 SHA256
DN_BCHAIN_HASH_BTC_SHA256_2X Bitcoin SHA256 2x.
DN_BCHAIN_HASH_KECCAK256 KECCAK256.
[in]pbHashHash calculado de acordo com o informado em bHashMode.
[in]dwHashLenTamanho do hash informado em pbHash.
[in]pbSigAssinatura de acordo com o informado em bSigType.
[in]dwSigLenTamanho da assinatura informada em pbSig.
[in]bInPbkTypeFormato da chave pública. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_PBK_SEC1_UNCOMP ECDSA SEC1 não comprimida.
DN_BCHAIN_PBK_SEC1_COMP ECDSA SEC1 comprimida.
DN_BCHAIN_PBK_BIP340 Schnorr, BIP-340.
DN_BCHAIN_PBK_ED25519 Ed25519.
[in]pbInPbkAssinatura de acordo com o informado em bInPbkType.
[in]bInPbkLenTamanho da assinatura informada em pbInPbk.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
sign_verify_bchain.c.

◆ DBchainEdDsaSign()

int AAP_API DBchainEdDsaSign ( HSESSIONCTX hSession,
BYTE bType,
const char * cszCtxStr,
BYTE * pbData,
DWORD dwDataLen,
const char * cszPk,
BYTE * pbSig,
DWORD * pdwSigLen,
DWORD dwReserved )

#include <dinamo.h>

Gera uma assinatura EdDsa usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeTipo da assinatura a ser gerada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_EDDSA_SIG_PURE Assinatura EdDsa Pure.
DN_BCHAIN_EDDSA_SIG_ALGORAND Assinatura EdDsa Algorand.
DN_BCHAIN_EDDSA_SIG_XRP Assinatura EdDsa XRP.
DN_BCHAIN_EDDSA_SIG_SOL Assinatura EdDsa Solana.
[in]cszCtxStrString de contexto (context-string) como definido na RFC-8032 . Pode ser passado DN_BCHAIN_EDDSA_CSTR_UNUSED.
[in]pbDataDados a serem assinados.
[in]dwDataLenTamanho dos dados a serem assinados.
[in]cszPkNome da chave privada.
[in,out]pbSigBuffer que receberá a assinatura. Pode ser NULL para obter o tamanho necessário. É recomendado utilizar o tamanho máximo de DN_BCHAIN_MAX_SIG_LEN.
[in,out]pdwSigLenTamanho do buffer pbSig. Caso o buffer pbSig seja NULL, este parâmetro receberá o tamanho necessário.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DBchainEdDsaVerify()

int AAP_API DBchainEdDsaVerify ( HSESSIONCTX hSession,
BYTE bType,
const char * cszCtxStr,
BYTE * pbData,
DWORD dwDataLen,
BYTE bPbkType,
BYTE * pbPbk,
DWORD dwPbkLen,
BYTE * pbSig,
DWORD dwSigLen,
DWORD dwReserved )

#include <dinamo.h>

Verifica uma assinatura EdDsa usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeTipo da assinatura a ser verificada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_EDDSA_SIG_PURE Assinatura EdDsa Pure.
DN_BCHAIN_EDDSA_SIG_ALGORAND Assinatura EdDsa Algorand.
DN_BCHAIN_EDDSA_SIG_XRP Assinatura EdDsa XRP.
DN_BCHAIN_EDDSA_SIG_SOL Assinatura EdDsa Solana.
[in]cszCtxStrString de contexto (context-string) como definido na RFC-8032 de tamanho máximo DN_BCHAIN_EDDSA_MAX_CSTRL. Pode ser passado DN_BCHAIN_EDDSA_CSTR_UNUSED.
[in]pbDataDados a serem verificados.
[in]dwDataLenTamanho dos dados a serem verificados.
[in]bPbkTypeFormato da chave pública. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_PBK_ED25519 Ed25519.
DN_BCHAIN_PBK_AT_ALGORAND Algorand.
DN_BCHAIN_PBK_BIP32_XPUB BIP32 XPub.
DN_BCHAIN_PBK_AT_SOL Solana.
[in]pbPbkChave pública utilizada na verificação.
[in]dwPbkLenTamanho da chave pública.
[in]pbSigAssinatura a ser verificada.
[in]dwSigLenTamanho da assinatura.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.

◆ DBchainPkImport()

int AAP_API DBchainPkImport ( HSESSIONCTX hSession,
BYTE bFormat,
DWORD dwAttributes,
const char * cszId,
const BYTE * pcbData,
DWORD dwDataLen,
DWORD dwReserved )

#include <dinamo.h>

Importa uma chave privada usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bFormatFormato da chave a ser importada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_KEY_WIF Wallet Import Format (WIF).
DN_BCHAIN_KEY_MINI Bitcoin minikey.
DN_BCHAIN_KEY_HEX Escalar da chave privada em hexadecimal. Importada como uma chave do tipo ALG_ECC_SECP256K1.
DN_BCHAIN_KEY_SEC1 SEC1.
DN_BCHAIN_KEY_XPRIV XPriv.
DN_BCHAIN_KEY_ED25519_B64 Ed25519 no formato Base 64.
DN_BCHAIN_KEY_ED25519_XPRIV Ed25519 no formato XPriv.
[in]dwAttributesParâmetros adicionais da chave. Veja as opções na função DGenerateKey(). Esta API inclui automaticamente a flag BCHAIN_KEY, que é necessária para as operações de blockchain.
[in]cszIdNome da chave privada.
[in]pcbDataChave privada no formato especificado em bFormat. O tamanho deste buffer deve ser informado em dwDataLen.
[in]dwDataLenTamanho do buffer pcbData.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
import_export_bchain.c.

◆ DBchainPkExport()

int AAP_API DBchainPkExport ( HSESSIONCTX hSession,
BYTE bFormat,
BYTE bVersion,
BYTE bCompressed,
const char * cszId,
BYTE ** ppbData,
DWORD * pdwDataLen,
DWORD dwReserved )

#include <dinamo.h>

Exporta uma chave privada usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bFormatFormato da chave a ser exportada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_KEY_WIF Wallet Import Format (WIF). bVersion pode ser DN_BCHAIN_VER_WIF_MAIN_NET ou DN_BCHAIN_VER_WIF_TEST_NET.
DN_BCHAIN_KEY_MINI Bitcoin minikey. bVersion deve ser DN_BCHAIN_VER_UNUSED.
DN_BCHAIN_KEY_HEX Escalar da chave privada em hexadecimal. bVersion deve ser DN_BCHAIN_VER_UNUSED.
DN_BCHAIN_KEY_SEC1 SEC1. bVersion deve ser DN_BCHAIN_VER_UNUSED.
DN_BCHAIN_KEY_XPRIV XPriv. bVersion deve ser DN_BCHAIN_VER_UNUSED.
DN_BCHAIN_KEY_ED25519_B64 Ed25519 no formato Base 64. bVersion deve ser DN_BCHAIN_VER_UNUSED e o parâmetro bCompressed é ignorado.
DN_BCHAIN_KEY_ED25519_XPRIV Ed25519 no formato XPriv. bVersion deve ser DN_BCHAIN_VER_UNUSED e o parâmetro bCompressed é ignorado.
[in]bVersionVersão da chave.
Valor Significado
DN_BCHAIN_VER_UNUSED Parâmetro não utilizado.
DN_BCHAIN_VER_WIF_MAIN_NET WIF main net.
DN_BCHAIN_VER_WIF_TEST_NET WIF test net.
[in]bCompressed0 para exportar a chave no formato não comprimido e 1 para o formato comprimido.
[in]cszIdNome da chave privada.
[out]ppbDataChave privada. O tamanho deste buffer será informado em pdwDataLen. Este buffer deverá ser liberado com a API DFree().
[out]pdwDataLenTamanho do buffer ppcbData.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
import_export_bchain.c.

◆ DBchainGetPubKey()

int AAP_API DBchainGetPubKey ( HSESSIONCTX hSession,
BYTE bType,
const char * cszId,
BYTE * pbData,
DWORD * pdwDataLen,
DWORD dwReserved )

#include <dinamo.h>

Recupera uma chave pública a partir de uma chave privada usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bTypeFormato da chave pública a ser exportada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_PBK_SEC1_UNCOMP ECDSA SEC1 não comprimida.
DN_BCHAIN_PBK_SEC1_COMP ECDSA SEC1 comprimida.
DN_BCHAIN_PBK_BIP340 Schnorr, BIP-340.
DN_BCHAIN_PBK_ED25519 Ed25519.
DN_BCHAIN_PBK_AT_ALGORAND Algorand.
DN_BCHAIN_PBK_BIP32_XPUB BIP32 XPub.
DN_BCHAIN_PBK_AT_SOL Solana.
[in]cszIdNome da chave privada.
[out]pbDataChave pública. Pode ser passado NULL para receber o tamanho esperado em pdwDataLen. O tamanho máximo deste buffer é DN_BCHAIN_MAX_PBK_LEN.
[in,out]pdwDataLenTamanho do buffer pcbData. Conterá, ao final da chamada, a quantidade de dados escritas em pcbData.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
get_pub_key_bchain.c.

◆ DBchainRecoverPbkFromSignature()

int AAP_API DBchainRecoverPbkFromSignature ( HSESSIONCTX hSession,
BYTE bSigType,
BYTE bHashMode,
const BYTE * pbHash,
DWORD dwHashLen,
const BYTE * pbSig,
DWORD dwSigLen,
DN_BCHAIN_PBK * pPbk,
DWORD dwReserved )

#include <dinamo.h>

Recupera uma chave pública (PBK) a partir de uma assinatura tipo ECDSA.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bSigTypeTipo da assinatura a ser gerada. Pode ser um dos valores abaixo.
Valor Significado
DN_BCHAIN_SIG_DER_ECDSA Assinatura DER, no formato v || DER. SECG!SEC1 strict DER com low S como descrito em BIP62/66, BIP146, EIP2. Tendo 'v' o tamanho de 1 byte. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
DN_BCHAIN_SIG_RAW_ECDSA Assinatura RAW, no formato v || r || s. Tendo 'v' o tamanho de 1 byte e 'r' e 's' cada uma o tamanho de 32 bytes. 'v' é o bit de paridade de 'r' podendo ter os valores 0 ou 1.
[in]bHashModeTipo do hash.
Valor Significado
DN_BCHAIN_HASH_BTC_H160 Bitcoin H160.
DN_BCHAIN_HASH_RIPEMD160 RIPEMD160.
DN_BCHAIN_HASH_SHA256 SHA256
DN_BCHAIN_HASH_BTC_SHA256_2X Bitcoin SHA256 2x.
DN_BCHAIN_HASH_KECCAK256 KECCAK256.
[in]pbHashHash calculado de acordo com o informado em bHashMode.
[in]dwHashLenTamanho do hash informado em pbHash.
[in]pbSigAssinatura de acordo com o informado em bSigType.
[in]dwSigLenTamanho da assinatura informada em pbSig.
[out]pPbkChave pública a ser recuperada. Informar uma estrutura do tipo DN_BCHAIN_PBK.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
sign_verify_bchain.c.

◆ DBchainGetKeyInfo()

int AAP_API DBchainGetKeyInfo ( HSESSIONCTX hSession,
DWORD dwReserved,
const char * cszId,
void * pvData,
DWORD * pdwDataLen )

#include <dinamo.h>

Recupera as propriedades de uma chave usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]dwReservedReservado para uso futuro (deve ser 0).
[in]cszIdNome da chave privada.
[out]pvDataPropriedades da chave. Recebe uma estrutura DN_BCHAIN_KEY_INFO. Pode ser passado NULL para receber o tamanho esperado em pdwDataLen.
[in,out]pdwDataLenTamanho do buffer pcbData. Conterá, ao final da chamada, a quantidade de dados escritas em pcbData.
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Exemplos
get_key_info_bchain.c.

◆ DBchainHashData()

int AAP_API DBchainHashData ( HSESSIONCTX hSession,
BYTE bMode,
BYTE * pbData,
DWORD dwDataLen,
BYTE * pbHash,
DWORD * pdwHashLen,
DWORD dwReserved )

#include <dinamo.h>

Calcula um hash usando o módulo blockchain.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]bModeTipo do hash.
Valor Significado
DN_BCHAIN_HASH_BTC_H160 Bitcoin H160.
DN_BCHAIN_HASH_RIPEMD160 RIPEMD160.
DN_BCHAIN_HASH_SHA256 SHA256
DN_BCHAIN_HASH_BTC_SHA256_2X Bitcoin SHA256 2x.
DN_BCHAIN_HASH_KECCAK256 KECCAK256.
[in]pbDataDados que serão processados. O tamanho deste buffer deve ser informado em dwDataLen. Tamanho máximo de DN_BCHAIN_MAX_HDATA_LEN.
[in]dwDataLenTamanho do buffer pbData.
[out]pbHashRecebe o hash calculado. Pode ser passado NULL para receber o tamanho esperado em pdwHashLen.
[in,out]pdwHashLenTamanho do buffer pbHash. Conterá, ao final da chamada, a quantidade de dados escritas em pbHash.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Anotações
Esta API está disponível para validação de implementação. Recomendamos a geração do hash por software para melhor performance e melhor uso dos recursos do HSM.
Exemplos
sign_verify_bchain.c.

◆ DBchainEd2X()

int AAP_API DBchainEd2X ( HSESSIONCTX hSession,
const char * cszPk,
const char * cszTo,
DWORD dwAttr,
DWORD dwReserved )

#include <dinamo.h>

Converte uma chave Edwards (Ed) para o formato Montgomery (x). Atualmente converte chaves Ed25519 para X25519.

Parâmetros
[in]hSessionContexto adquirido através da função DOpenSession().
[in]cszPkNome da chave privada no formato Edwards, existente no HSM.
[in]cszToNome da chave privada no formato Montgomery, que será criada no HSM.
[in]dwAttrAtributos da chave. Veja dwAttr em DGenerateKey() para detalhes sobre os atributos de chave. Os atributos são adicionados aos atributos atuais da chave de origem cszPk.
[in]dwReservedReservado para uso futuro (deve ser 0).
Retorna
0 (ZERO) se a função for bem sucedida.
Consulte a seção Códigos de Retorno sobre outros valores.
Observação
As chaves devem ser marcadas com a flag BCHAIN_KEY para serem convertidas.