generateSignature static method

SignatureResult generateSignature(
  1. Map<String, dynamic> payload,
  2. String secretKey, {
  3. HmacConfig config = const HmacConfig(),
})

Generate HMAC signature with timestamp and nonce for API authentication

payload - The JSON object to sign secretKey - The secret key for HMAC generation config - Optional configuration Returns Result object containing timestamp, nonce, and signature

Example:

final result = HmacOperations.generateSignature(
  {'property_id': 'PROP123', 'user_id': '456'},
  'your-secret-key'
);
print(result.signature);

Implementation

static SignatureResult generateSignature(
  Map<String, dynamic> payload,
  String secretKey, {
  HmacConfig config = const HmacConfig(),
}) {
  try {
    // Step 1: Validate Inputs
    _validateInputs(payload, secretKey, config);

    // Step 2: Generate Timestamp
    final timestamp = _generateTimestamp(config);

    // Step 3: Generate Nonce
    final nonce = _generateNonce(config);

    // Step 4: Create Signature Payload
    final canonicalString = _createCanonicalString(
      payload,
      timestamp,
      nonce,
      config,
    );

    // Step 5: Generate HMAC Signature
    final signature = _generateHmac(canonicalString, secretKey, config);

    // Step 6: Return Result
    return SignatureResult(
      timestamp: timestamp,
      nonce: nonce,
      signature: signature,
      algorithm: config.hashAlgorithm,
      encoding: config.encoding,
      canonicalString: canonicalString,
    );
  } catch (e) {
    throw Exception(
      '[HmacOperations.generateSignature] Failed to generate signature: $e\n'
      'Context: ${jsonEncode({'payload': payload, 'configProvided': config})}',
    );
  }
}