diff --git a/src/base58.js b/src/base58.js index 8210dda..60d9e5a 100644 --- a/src/base58.js +++ b/src/base58.js @@ -9,7 +9,7 @@ */ import { BASE58_ALPHABET, BASE58_FULL_BLOCK_SIZE, BASE58_FULL_ENCODED_BLOCK_SIZE, BASE58_ENCODED_BLOCK_SIZES } from './constants.js'; -import { keccak256 } from './keccak.js'; +import { keccak256 } from './crypto/index.js'; // Build reverse alphabet lookup const ALPHABET_MAP = new Map(); diff --git a/src/bulletproofs_plus.js b/src/bulletproofs_plus.js index c15cf81..cc37eaf 100644 --- a/src/bulletproofs_plus.js +++ b/src/bulletproofs_plus.js @@ -9,7 +9,7 @@ import { ed25519, ed25519_hasher } from '@noble/curves/ed25519.js'; import { mod, invert, Field } from '@noble/curves/abstract/modular.js'; -import { keccak256 } from './keccak.js'; +import { keccak256 } from './crypto/index.js'; // Ed25519 curve order (L) const L = BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed'); diff --git a/src/carrot-scanning.js b/src/carrot-scanning.js index 9b09df1..f79c97e 100644 --- a/src/carrot-scanning.js +++ b/src/carrot-scanning.js @@ -15,10 +15,9 @@ * - Salvium carrot_core/enote_utils.cpp */ -import { blake2b } from './blake2b.js'; -import { keccak256 } from './keccak.js'; import { hexToBytes, bytesToHex } from './address.js'; -import { scalarMultPoint, pointFromBytes, pointToBytes } from './ed25519.js'; +import { pointFromBytes, pointToBytes } from './ed25519.js'; +import { blake2b, keccak256, scalarMultPoint } from './crypto/index.js'; // Group order L for scalar reduction const L = (1n << 252n) + 27742317777372353535851937790883648493n; @@ -698,8 +697,7 @@ export function scanCarrotOutput(output, viewIncomingKey, accountSpendPubkey, in // Import additional ed25519 functions // ============================================================================ -import { scalarMultBase, pointAddCompressed } from './ed25519.js'; -import { hashToPoint } from './keyimage.js'; +import { scalarMultBase, pointAddCompressed, hashToPoint } from './crypto/index.js'; // Group order L for scalar reduction (also defined at top for clarity) const L_ORDER = (1n << 252n) + 27742317777372353535851937790883648493n; diff --git a/src/carrot.js b/src/carrot.js index 150c370..1334f89 100644 --- a/src/carrot.js +++ b/src/carrot.js @@ -3,10 +3,9 @@ * Implements key derivation as per Salvium specification */ -import { blake2b } from './blake2b.js'; -import { keccak256 } from './keccak.js'; import { hexToBytes, bytesToHex } from './address.js'; -import { scalarMultBase, computeCarrotSpendPubkey, computeCarrotMainAddressViewPubkey, computeCarrotAccountViewPubkey } from './ed25519.js'; +import { computeCarrotSpendPubkey, computeCarrotMainAddressViewPubkey, computeCarrotAccountViewPubkey } from './ed25519.js'; +import { blake2b, keccak256, scalarMultBase } from './crypto/index.js'; // Group order L for scalar reduction const L = (1n << 252n) + 27742317777372353535851937790883648493n; diff --git a/src/mining.js b/src/mining.js index 714c245..8f6bbda 100644 --- a/src/mining.js +++ b/src/mining.js @@ -8,7 +8,8 @@ * Reference: cryptonote_basic/miner.cpp, cryptonote_basic/difficulty.cpp */ -import { keccak256, cnFastHash } from './keccak.js'; +import { cnFastHash } from './keccak.js'; +import { keccak256 } from './crypto/index.js'; import { encodeVarint, serializeBlockHeader, HF_VERSION_ENABLE_ORACLE } from './transaction.js'; // ============================================================================= diff --git a/src/multisig-carrot.js b/src/multisig-carrot.js index 1d6beda..c102a0b 100644 --- a/src/multisig-carrot.js +++ b/src/multisig-carrot.js @@ -13,9 +13,8 @@ */ import { bytesToHex, hexToBytes } from './address.js'; -import { keccak256 } from './keccak.js'; -import { scalarMultBase, scalarMultPoint, pointAddCompressed } from './ed25519.js'; import { computeCarrotSpendPubkey, computeCarrotMainAddressViewPubkey, computeCarrotAccountViewPubkey } from './ed25519.js'; +import { keccak256, scalarMultBase, scalarMultPoint, pointAddCompressed } from './crypto/index.js'; import { scAdd } from './transaction.js'; import { MultisigAccount } from './multisig.js'; import { diff --git a/src/multisig.js b/src/multisig.js index e95d2f8..e2b97f5 100644 --- a/src/multisig.js +++ b/src/multisig.js @@ -18,8 +18,8 @@ */ import { bytesToHex, hexToBytes } from './address.js'; -import { keccak256 } from './keccak.js'; -import { scalarMultBase, scalarMultPoint, pointAddCompressed, randomScalar } from './ed25519.js'; +import { randomScalar } from './ed25519.js'; +import { keccak256, scalarMultBase, scalarMultPoint, pointAddCompressed } from './crypto/index.js'; import { scReduce32, scAdd, scMul, scMulAdd } from './transaction.js'; import { encode as base58Encode, decode as base58Decode } from './base58.js'; diff --git a/src/offline.js b/src/offline.js index 174a456..147120f 100644 --- a/src/offline.js +++ b/src/offline.js @@ -12,7 +12,7 @@ */ import { bytesToHex, hexToBytes } from './address.js'; -import { keccak256 } from './keccak.js'; +import { keccak256 } from './crypto/index.js'; import { signTransaction, serializeTransaction, diff --git a/src/signature.js b/src/signature.js index 2451119..bd426aa 100644 --- a/src/signature.js +++ b/src/signature.js @@ -10,7 +10,7 @@ * V2: hash = Keccak256(domain_separator + spend_key + view_key + mode + varint(len) + message) */ -import { keccak256 } from './keccak.js'; +import { keccak256 } from './crypto/index.js'; import { decode } from './base58.js'; import { parseAddress } from './address.js'; import { diff --git a/src/subaddress.js b/src/subaddress.js index 6b30183..9008a89 100644 --- a/src/subaddress.js +++ b/src/subaddress.js @@ -5,13 +5,10 @@ * plus integrated address creation. */ -import { keccak256 } from './keccak.js'; -import { blake2b } from './blake2b.js'; import { - scalarMultBase, - scalarMultPoint, - pointAddCompressed -} from './ed25519.js'; + keccak256, blake2b, + scalarMultBase, scalarMultPoint, pointAddCompressed, +} from './crypto/index.js'; // Group order L for scalar reduction const L = (1n << 252n) + 27742317777372353535851937790883648493n; diff --git a/src/testnet/index.js b/src/testnet/index.js index 79c0bae..3f738a8 100644 --- a/src/testnet/index.js +++ b/src/testnet/index.js @@ -15,7 +15,7 @@ import { MemoryStorage } from '../wallet-store.js'; import { WalletSync } from '../wallet-sync.js'; import { NETWORK_ID, CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW } from '../consensus.js'; import { generateSeed, deriveKeys, deriveCarrotKeys } from '../carrot.js'; -import { generateKeyDerivation, deriveSecretKey } from '../scanning.js'; +import { generateKeyDerivation, deriveSecretKey } from '../crypto/index.js'; import { selectUTXOs } from '../transaction/utxo.js'; import { buildTransaction, diff --git a/src/testnet/miner-tx.js b/src/testnet/miner-tx.js index 159f1a7..a20e3ee 100644 --- a/src/testnet/miner-tx.js +++ b/src/testnet/miner-tx.js @@ -11,8 +11,9 @@ * @module testnet/miner-tx */ -import { randomScalar, scalarMultBase } from '../ed25519.js'; -import { generateKeyDerivation, derivePublicKey, deriveViewTag } from '../scanning.js'; +import { randomScalar } from '../ed25519.js'; +import { deriveViewTag } from '../scanning.js'; +import { scalarMultBase, generateKeyDerivation, derivePublicKey } from '../crypto/index.js'; import { cnFastHash } from '../keccak.js'; import { serializeTxPrefix, encodeVarint } from '../transaction/serialization.js'; import { bytesToHex, hexToBytes } from '../address.js'; diff --git a/src/transaction.js b/src/transaction.js index 6aa924b..7aa8477 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -10,10 +10,14 @@ * Reference: Salvium/Monero src/ringct/rctOps.cpp, src/ringct/rctSigs.cpp */ -import { keccak256, keccak256Hex } from './keccak.js'; -import { scalarMultBase, scalarMultPoint, pointAddCompressed, getGeneratorG, getGeneratorT } from './ed25519.js'; -import { generateKeyDerivation, derivationToScalar, derivePublicKey, deriveSecretKey } from './scanning.js'; -import { hashToPoint, generateKeyImage } from './keyimage.js'; +import { keccak256Hex } from './keccak.js'; +import { getGeneratorG, getGeneratorT } from './ed25519.js'; +import { derivationToScalar } from './scanning.js'; +import { + keccak256, scalarMultBase, scalarMultPoint, pointAddCompressed, + generateKeyDerivation, derivePublicKey, deriveSecretKey, + hashToPoint, generateKeyImage, +} from './crypto/index.js'; import { bytesToHex, hexToBytes } from './address.js'; // ============================================================================= diff --git a/src/transaction/analysis.js b/src/transaction/analysis.js index 71f146c..d67e65c 100644 --- a/src/transaction/analysis.js +++ b/src/transaction/analysis.js @@ -11,7 +11,7 @@ * @module transaction/analysis */ -import { keccak256 } from '../keccak.js'; +import { keccak256 } from '../crypto/index.js'; import { hexToBytes } from '../address.js'; import { TXIN_TYPE } from './constants.js'; diff --git a/src/transaction/carrot-output.js b/src/transaction/carrot-output.js index db70963..c338482 100644 --- a/src/transaction/carrot-output.js +++ b/src/transaction/carrot-output.js @@ -14,13 +14,16 @@ * @module transaction/carrot-output */ -import { blake2b } from '../blake2b.js'; import { hexToBytes, bytesToHex } from '../address.js'; -import { scalarMultBase, scalarMultPoint, pointAddCompressed, getGeneratorT } from '../ed25519.js'; +import { getGeneratorT } from '../ed25519.js'; import { edwardsToMontgomeryU, x25519ScalarMult } from '../carrot-scanning.js'; +import { + blake2b, scalarMultBase, scalarMultPoint, pointAddCompressed, + scReduce32, commit, +} from '../crypto/index.js'; import { CARROT_DOMAIN, CARROT_ENOTE_TYPE } from './constants.js'; -import { scReduce32, bigIntToBytes, commit } from './serialization.js'; +import { bigIntToBytes } from './serialization.js'; // ============================================================================= // CARROT HASH FUNCTIONS diff --git a/src/wallet-sync.js b/src/wallet-sync.js index 0a92bf6..159de2a 100644 --- a/src/wallet-sync.js +++ b/src/wallet-sync.js @@ -12,9 +12,6 @@ import { WalletOutput, WalletTransaction } from './wallet-store.js'; import { - generateKeyDerivation, - derivePublicKey, - deriveSecretKey, deriveViewTag, computeSharedSecret, ecdhDecodeFull, @@ -23,11 +20,13 @@ import { } from './scanning.js'; import { cnSubaddressSecretKey, carrotIndexExtensionGenerator, carrotSubaddressScalar } from './subaddress.js'; import { scanCarrotOutput, makeInputContext, makeInputContextCoinbase, generateCarrotKeyImage } from './carrot-scanning.js'; -import { generateKeyImage } from './keyimage.js'; import { parseTransaction, extractTxPubKey, extractPaymentId } from './transaction.js'; import { bytesToHex, hexToBytes } from './address.js'; import { TX_TYPE } from './wallet.js'; -import { commit as pedersonCommit } from './transaction/serialization.js'; +import { + generateKeyDerivation, derivePublicKey, deriveSecretKey, + generateKeyImage, commit as pedersonCommit, +} from './crypto/index.js'; // ============================================================================ // CONSTANTS diff --git a/src/wallet.js b/src/wallet.js index f10f152..77fe1b6 100644 --- a/src/wallet.js +++ b/src/wallet.js @@ -19,8 +19,8 @@ import { generateSeed, deriveKeys, deriveCarrotKeys } from './carrot.js'; import { createAddress, parseAddress, hexToBytes, bytesToHex } from './address.js'; import { cnSubaddress } from './subaddress.js'; -import { generateKeyDerivation, derivationToScalar, deriveSecretKey, scanTransaction } from './scanning.js'; -import { generateKeyImage } from './keyimage.js'; +import { derivationToScalar, scanTransaction } from './scanning.js'; +import { generateKeyDerivation, deriveSecretKey, generateKeyImage, scalarMultBase } from './crypto/index.js'; import { buildTransaction, buildStakeTransaction, @@ -259,7 +259,6 @@ export class Wallet { : spendPublicKey; // Derive view public key from view secret key - const { scalarMultBase } = require('./ed25519.js'); wallet._viewPublicKey = scalarMultBase(wallet._viewSecretKey); return wallet;