Skip to main content

Cryptographic Operations Validation Test Suite

CODITECT Biosciences QMS Platform

Document Control

AttributeValue
Document IDCRYPTO-VAL-TEST-001
Version1.0.0
StatusDraft
ClassificationInternal - Validation
Effective DateTBD
Review CycleAnnual or upon cryptographic system changes
OwnerSecurity & Compliance Team

Approval Signatures

RoleNameSignatureDate
Prepared BySecurity Engineer_________________________
Reviewed ByQA Manager_________________________
Approved ByVP Engineering_________________________
Approved ByQuality Assurance_________________________

Revision History

VersionDateAuthorChanges
1.0.02026-02-16Claude (Opus 4.6)Initial document creation

1. Executive Summary

This document defines the comprehensive validation test suite for all cryptographic operations in the CODITECT Biosciences QMS Platform. The test suite ensures compliance with:

  • FDA 21 CFR Part 11 (Electronic Records and Electronic Signatures)
  • HIPAA Security Rule (45 CFR Part 164)
  • SOC 2 Type II (Trust Services Criteria)
  • NIST FIPS 140-2/3 (Cryptographic Module Validation)
  • NIST SP 800-57 (Key Management Recommendations)

Purpose

Validate that all cryptographic operations meet regulatory requirements, industry standards, and performance targets through:

  1. NIST Known Answer Tests (KAT) - Verify algorithm implementations against published test vectors
  2. Operational Tests - Validate real-world cryptographic workflows including HSM integration
  3. Performance Benchmarks - Ensure cryptographic operations meet latency and throughput targets
  4. Negative Security Tests - Verify rejection of weak algorithms, tampered data, and unauthorized access

Scope

This test suite covers:

  • Digital Signatures: ECDSA P-256, RSA-2048
  • Encryption: AES-256-GCM, envelope encryption with DEK/KEK
  • Hashing: SHA-256, SHA-512, HMAC-SHA256
  • Key Management: Generation, rotation, revocation, destruction via Google Cloud KMS
  • PKI Operations: Certificate issuance, chain validation, revocation (CRL/OCSP)
  • Transport Security: TLS 1.3, mutual TLS (mTLS), certificate pinning

Success Criteria

All test cases must pass with:

  • NIST Vector Tests: 100% exact match with published test vectors
  • Operational Tests: 100% pass rate with correct outputs and error handling
  • Performance Tests: ≥ 95% of operations meet target latency
  • Security Tests: 100% rejection of weak algorithms and tampered data

2. Test Strategy Overview

2.1 Test Approach

The validation follows a four-layer testing pyramid:

                    ┌─────────────────┐
│ Compliance │ (Traceability to FDA/HIPAA/SOC2)
│ Traceability │
└─────────────────┘
┌───────────────────┐
│ Integration │ (End-to-end workflows)
│ Tests │
└───────────────────┘
┌──────────────────────────┐
│ Operational Tests │ (Real HSM, certificates)
└──────────────────────────┘
┌────────────────────────────────────┐
│ NIST Known Answer Tests (KAT) │ (Algorithm correctness)
└────────────────────────────────────┘

2.2 Test Environment Requirements

Hardware and Services

  • Google Cloud KMS: Production-equivalent HSM keyring for test tenant
  • Google Cloud Platform: GKE cluster (dev/staging environment)
  • Compute Resources: Minimum 4 vCPU, 16GB RAM for performance testing
  • Network Access: Internal VPC with Cloud KMS API access

Software Prerequisites

  • Node.js: v18+ (LTS)
  • TypeScript: v5+
  • Test Framework: Jest 29+ or Vitest 1+
  • OpenSSL: v3.0+ (for certificate operations)
  • Google Cloud SDK: Latest stable version

Test Data Requirements

  • Test Tenant: Dedicated organization test-org-crypto-validation with isolated database
  • Test Certificates: Self-issued root CA, intermediate CA, 10+ user certificates (valid/expired/revoked)
  • NIST Test Vectors: Downloaded from NIST CAVP (Cryptographic Algorithm Validation Program)
  • Performance Baselines: Prior test run results for regression detection

Configuration

// test-config.ts
export const CRYPTO_TEST_CONFIG = {
kms: {
projectId: 'coditect-qms-test',
location: 'us-central1',
keyRingId: 'test-crypto-validation',
},
tenant: {
orgId: 'test-org-crypto-validation',
isolation: 'strict',
},
performance: {
warmupIterations: 100,
benchmarkIterations: 1000,
concurrentUsers: [10, 50, 100],
},
};

2.3 Test Execution Phases

PhaseDescriptionTest SetsPass Criteria
IQInstallation QualificationNIST KAT, HSM connectivity100% pass
OQOperational QualificationOperational tests, negative tests100% pass
PQPerformance QualificationBenchmarks, load tests≥95% meet targets

2.4 Evidence Collection

All test executions must capture:

  • Test Execution Report: Timestamped results with pass/fail status
  • Test Logs: Full console output and application logs
  • Performance Metrics: CSV export of latency measurements
  • Digital Signature: Test report signed by QA lead
  • Screenshots: Critical test steps (certificate validation, HSM operations)

Evidence stored in: gs://coditect-qms-validation/crypto-test-results/YYYY-MM-DD/


3. NIST Test Vector Validation

3.1 ECDSA P-256 (FIPS 186-4)

Algorithm: Elliptic Curve Digital Signature Algorithm using NIST P-256 curve (secp256r1)

Reference: NIST FIPS 186-4 Appendix B.4, NIST CAVP ECDSA Test Vectors

TC-NIST-ECDSA-001: Key Pair Generation Validation

Objective: Verify generated public key lies on the P-256 curve and corresponds to private key.

Test Vector (from NIST):

Private Key (d):
C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721

Expected Public Key (Qx, Qy):
Qx: 60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6
Qy: 7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299

Procedure:

  1. Import private key d into test HSM keyring
  2. Retrieve public key from HSM
  3. Verify Qx and Qy match expected values
  4. Verify point is on curve: y² ≡ x³ + ax + b (mod p)

Expected Result: Public key matches NIST vector exactly.

TC-NIST-ECDSA-002: Signature Generation with Known Vector

Objective: Verify signature generation produces expected (r, s) values.

Test Vector (from NIST SigGen):

Message (SHA-256 hash):
44ACEF8A6E2B8B89E3D4F3D3E5F8D9B7A0C3F8A2B5E8D4F3A7E9B2C5A8E4D9F3

Private Key (d):
C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721

Random k (deterministic per RFC 6979):
9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECE

Expected Signature:
r: F3AC8061B514795B8843E3D6629527ED2AFD6B1F6A555A7ACABB5E6F79C8C2AC
s: 8BF77819CA05A6B2786C76262BF7371CEF97B218E96F175A3CCDDA2ACC058903

Procedure:

  1. Hash message with SHA-256
  2. Sign hash using private key with deterministic nonce (RFC 6979)
  3. Extract signature components (r, s)
  4. Compare with expected values

Expected Result: Signature (r, s) matches NIST vector exactly.

TC-NIST-ECDSA-003: Signature Verification with Known Vector

Objective: Verify valid signature passes verification.

Test Vector (from TC-NIST-ECDSA-002):

Message Hash: 44ACEF8A...
Public Key (Qx, Qy): 60FED4BA..., 7903FE10...
Signature (r, s): F3AC8061..., 8BF77819...

Procedure:

  1. Verify signature using public key
  2. Check verification returns true

Expected Result: Signature verification succeeds.

TC-NIST-ECDSA-004: Invalid Signature Rejection

Objective: Verify tampered signatures are rejected.

Test Data: Use vector from TC-NIST-ECDSA-002 with modified s component.

Procedure:

  1. Flip one bit in signature component s
  2. Attempt verification
  3. Check verification returns false

Expected Result: Verification fails with clear error message.

TC-NIST-ECDSA-005: Point-Not-On-Curve Rejection

Objective: Verify invalid public keys are rejected.

Test Data: Public key with (Qx, Qy) not satisfying curve equation.

Procedure:

  1. Attempt to import invalid public key
  2. Check operation fails with validation error

Expected Result: Import fails with "point not on curve" error.


3.2 AES-256-GCM (NIST SP 800-38D)

Algorithm: Advanced Encryption Standard (256-bit key) in Galois/Counter Mode

Reference: NIST SP 800-38D, NIST CAVP GCM Test Vectors

TC-NIST-AES-001: Encryption with Known Vector

Objective: Verify AES-256-GCM encryption produces expected ciphertext and authentication tag.

Test Vector (from NIST CAVP gcmEncryptExtIV256):

Key (256-bit):
92E11DCDAA866F5CE790FD24501F92509AACF4CB8B1339D50C9C1240935DD08B

IV (96-bit):
AC93A1A6145299BCE4C6A485

Plaintext (128-bit):
2D71BCF9DCB9B2A8E0D3A7F0C6F5B9E1

AAD (Additional Authenticated Data):
5C9E940FEAD2B5A05F19FCF1

Expected Ciphertext:
8A68A5FD3E87CED96F7A3F77

Expected Tag (128-bit):
D00A3A0F53EE68FCDB5D4C34A90B1656

Procedure:

  1. Import key into HSM
  2. Encrypt plaintext with given IV and AAD
  3. Extract ciphertext and authentication tag
  4. Compare with expected values

Expected Result: Ciphertext and tag match NIST vector exactly.

TC-NIST-AES-002: Decryption with Known Vector

Objective: Verify AES-256-GCM decryption recovers original plaintext.

Test Vector (from TC-NIST-AES-001):

Procedure:

  1. Decrypt ciphertext with key, IV, AAD, and tag
  2. Verify tag authentication succeeds
  3. Compare decrypted plaintext with original

Expected Result: Plaintext matches original input exactly.

TC-NIST-AES-003: Authentication Tag Verification

Objective: Verify correct tag authenticates, incorrect tag rejects.

Test Data: Use vector from TC-NIST-AES-001 with flipped bit in tag.

Procedure:

  1. Attempt decryption with tampered tag
  2. Check operation fails with authentication error

Expected Result: Decryption fails with "authentication tag mismatch" error.

TC-NIST-AES-004: Tampered Ciphertext Detection

Objective: Verify tampered ciphertext is detected during decryption.

Test Data: Use vector from TC-NIST-AES-001 with modified ciphertext byte.

Procedure:

  1. Flip one bit in ciphertext
  2. Attempt decryption with original tag
  3. Check authentication failure

Expected Result: Decryption fails with authentication error (tag computed from tampered ciphertext won't match).

TC-NIST-AES-005: IV Uniqueness Enforcement

Objective: Verify system prevents IV/nonce reuse with same key.

Test Data: Two different plaintexts, same key and IV.

Procedure:

  1. Encrypt plaintext A with key K and IV I
  2. Attempt to encrypt plaintext B with same key K and IV I
  3. Check system generates new random IV or rejects operation

Expected Result: System either auto-generates unique IV or returns error "IV reuse detected".

TC-NIST-AES-006: Large Data Encryption (Streaming)

Objective: Verify correct encryption of data exceeding single-block size.

Test Vector (from NIST CAVP gcmEncryptExtIV256, 256-byte plaintext):

Key: 92E11DCD... (same as TC-NIST-AES-001)
IV: AC93A1A6...
Plaintext: [256 bytes - truncated for brevity]
Expected Ciphertext: [256 bytes]
Expected Tag: 8B3C59D2...

Procedure:

  1. Encrypt 256-byte plaintext
  2. Verify ciphertext and tag match expected values

Expected Result: Correct ciphertext and tag for multi-block data.


3.3 SHA-256 (FIPS 180-4)

Algorithm: Secure Hash Algorithm 256-bit

Reference: NIST FIPS 180-4, NIST CAVP SHA Test Vectors

TC-NIST-SHA-001: Empty String Hash

Objective: Verify hash of empty input.

Test Vector:

Message: "" (empty string)
Expected Hash (SHA-256):
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855

Procedure:

  1. Compute SHA-256 hash of empty string
  2. Compare with expected value

Expected Result: Hash matches NIST vector exactly.

TC-NIST-SHA-002: Single-Block Message Hash

Objective: Verify hash of message ≤ 512 bits (single SHA-256 block).

Test Vector (from NIST CAVP SHA-256 ShortMsg):

Message (ASCII): "abc"
Expected Hash:
BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD

Procedure:

  1. Compute SHA-256 hash of "abc"
  2. Compare with expected value

Expected Result: Hash matches NIST vector exactly.

TC-NIST-SHA-003: Multi-Block Message Hash

Objective: Verify hash of message requiring multiple 512-bit blocks.

Test Vector (from NIST CAVP SHA-256 LongMsg):

Message (ASCII): "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno" (448 bits)
+ "ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" (384 bits)
= 832 bits total (2 SHA-256 blocks)

Expected Hash:
CF5B16A778AF8380036CE59E7B0492370B249B11E8F07A51AFAC45037AFEE9D1

Procedure:

  1. Compute SHA-256 hash of message
  2. Compare with expected value

Expected Result: Hash matches NIST vector exactly.

TC-NIST-SHA-004: Large Message Hash (Streaming)

Objective: Verify correct hashing of 1MB message using streaming API.

Test Data: Pseudorandom 1MB message generated from NIST DRBG.

Procedure:

  1. Generate 1MB test message with seed 0x12345678
  2. Compute hash using streaming API (1KB chunks)
  3. Compare with reference hash computed by OpenSSL
  4. Verify memory usage remains constant (streaming, not buffering entire message)

Expected Result: Hash matches reference, memory usage < 10MB.

TC-NIST-SHA-005: Collision Resistance Test

Objective: Verify different inputs produce different hashes (basic collision resistance check).

Test Data: 1000 randomly generated messages.

Procedure:

  1. Generate 1000 random messages (varying lengths 1-1024 bytes)
  2. Compute SHA-256 hash for each
  3. Verify all 1000 hashes are unique

Expected Result: Zero hash collisions across 1000 random inputs.


3.4 RSA-2048 (FIPS 186-4)

Algorithm: Rivest-Shamir-Adleman 2048-bit with PKCS#1 v1.5 and PSS padding

Reference: NIST FIPS 186-4 Section 5, NIST CAVP RSA Test Vectors

TC-NIST-RSA-001: Key Generation Validation

Objective: Verify generated RSA-2048 key pair meets FIPS 186-4 requirements.

Procedure:

  1. Generate RSA-2048 key pair via HSM
  2. Verify modulus n bit length = 2048
  3. Verify public exponent e = 65537
  4. Verify p and q are prime (Miller-Rabin test with 50 iterations)
  5. Verify |p - q| > 2^(1024-100) (p and q not too close)
  6. Verify d * e ≡ 1 (mod φ(n))

Expected Result: All validation checks pass.

TC-NIST-RSA-002: PKCS#1 v1.5 Signature Generation

Objective: Verify RSA signature with PKCS#1 v1.5 padding (legacy JWT support).

Test Vector (from NIST CAVP SigGen RSA):

Modulus n (2048-bit): [Hex value]
Private exponent d: [Hex value]
Message (SHA-256 hash): 44ACEF8A...
Expected Signature: [256 bytes]

Procedure:

  1. Import RSA private key
  2. Sign SHA-256 hash using PKCS#1 v1.5 padding
  3. Compare signature with expected value

Expected Result: Signature matches NIST vector exactly.

TC-NIST-RSA-003: PKCS#1 v1.5 Signature Verification

Objective: Verify RSA signature verification with PKCS#1 v1.5 padding.

Test Vector (from TC-NIST-RSA-002):

Procedure:

  1. Verify signature using RSA public key
  2. Check verification returns true

Expected Result: Signature verification succeeds.

TC-NIST-RSA-004: PSS Signature Generation

Objective: Verify RSA signature with PSS padding (modern standard).

Test Vector (from NIST CAVP SigGen RSA-PSS):

Modulus n: [2048-bit]
Private exponent d: [2048-bit]
Message Hash (SHA-256): 44ACEF8A...
Salt Length: 32 bytes
Expected Signature: [256 bytes]

Procedure:

  1. Sign hash using RSA-PSS with SHA-256 and 32-byte salt
  2. Compare signature with expected value

Expected Result: Signature matches NIST vector exactly.

TC-NIST-RSA-005: PSS Signature Verification

Objective: Verify RSA-PSS signature verification.

Test Vector (from TC-NIST-RSA-004):

Procedure:

  1. Verify PSS signature using public key
  2. Check verification returns true

Expected Result: Signature verification succeeds.

TC-NIST-RSA-006: Invalid Key Rejection

Objective: Verify system rejects weak RSA keys.

Test Data: RSA-1024 key (below minimum 2048-bit requirement).

Procedure:

  1. Attempt to import RSA-1024 private key
  2. Check operation fails with validation error

Expected Result: Import fails with "key size below minimum 2048 bits" error.


3.5 HMAC-SHA256 (FIPS 198-1)

Algorithm: Hash-based Message Authentication Code using SHA-256

Reference: FIPS 198-1, RFC 4231 HMAC-SHA256 Test Vectors

TC-NIST-HMAC-001: Known Vector Validation (Short Key)

Objective: Verify HMAC-SHA256 with key shorter than block size.

Test Vector (from RFC 4231 Test Case 1):

Key (20 bytes):
0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B

Data (ASCII): "Hi There"

Expected HMAC (32 bytes):
B0344C61D8DB38535CA8AFCEAF0BF12B881DC200C9833DA726E9376C2E32CFF7

Procedure:

  1. Compute HMAC-SHA256 using given key and data
  2. Compare with expected value

Expected Result: HMAC matches RFC 4231 vector exactly.

TC-NIST-HMAC-002: Known Vector Validation (Long Key)

Objective: Verify HMAC-SHA256 with key longer than SHA-256 block size (64 bytes).

Test Vector (from RFC 4231 Test Case 5):

Key (131 bytes):
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C... (131 times 0x0C)

Data (ASCII): "Test With Truncation"

Expected HMAC (32 bytes):
A3B6167473100EE06E0C796C2955552B

Note: Key > 64 bytes triggers key hashing per HMAC spec.

Procedure:

  1. Compute HMAC-SHA256 with 131-byte key
  2. Compare with expected value

Expected Result: HMAC matches RFC 4231 vector exactly.

TC-NIST-HMAC-003: Variable-Length Data

Objective: Verify HMAC correctness across different data lengths.

Test Vectors (from RFC 4231 Test Cases 2-4):

Test Case 2:
Key: "Jefe"
Data: "what do ya want for nothing?"
Expected: 5BDCC146BF60754E6A042426089575C75A003F089D2739839DEC58B964EC3843

Test Case 3:
Key: AAAA... (20 bytes)
Data: DDDD... (50 bytes)
Expected: 773EA91E36800E46854DB8EBD09181A72959098B3EF8C122D9635514CED565FE

Procedure:

  1. Compute HMAC for each test case
  2. Verify all match expected values

Expected Result: All HMACs match RFC 4231 vectors exactly.

TC-NIST-HMAC-004: Truncated MAC Validation

Objective: Verify truncated HMAC output (common in protocols like JWT).

Test Data: Use TC-NIST-HMAC-001 vector, truncate to 128 bits.

Procedure:

  1. Compute full 256-bit HMAC
  2. Truncate to first 128 bits
  3. Verify truncated value matches first 16 bytes of expected HMAC

Expected Result: Truncated HMAC matches expected prefix.

TC-NIST-HMAC-005: Timing Attack Resistance

Objective: Verify HMAC comparison uses constant-time algorithm.

Test Data: Correct HMAC and 100 incorrect HMACs differing at various byte positions.

Procedure:

  1. Generate correct HMAC for test message
  2. Create 100 incorrect HMACs (flip bits at positions 0, 1, 2, ..., 31)
  3. Measure verification time for each
  4. Compute standard deviation of verification times
  5. Verify stddev < 1% of mean time (indicating constant-time comparison)

Expected Result: Verification time variance < 1% (constant-time comparison confirmed).


4. Operational Test Cases

4.1 Key Management Operations

TC-KM-001: Generate ECDSA P-256 Key Pair via HSM

Objective: Verify successful creation of ECDSA signing key in Google Cloud KMS.

Procedure:

  1. Call keyManagementService.createKey() with algorithm EC_SIGN_P256_SHA256
  2. Verify key created with status ENABLED
  3. Verify key purpose = ASYMMETRIC_SIGN
  4. Retrieve public key and validate format (PEM-encoded X.509 SubjectPublicKeyInfo)
  5. Verify key is non-exportable (protection level = HSM)

Test Data:

{
keyRingId: 'test-crypto-validation',
keyId: 'test-ecdsa-p256-001',
algorithm: 'EC_SIGN_P256_SHA256',
protectionLevel: 'HSM',
}

Expected Result: Key created successfully, public key retrievable, protection level = HSM.

Evidence: Screenshot of Cloud KMS console showing created key, API response JSON.

TC-KM-002: Generate AES-256 Key via HSM

Objective: Verify successful creation of AES encryption key in Cloud KMS.

Procedure:

  1. Call keyManagementService.createKey() with algorithm GOOGLE_SYMMETRIC_ENCRYPTION
  2. Verify key created with purpose = ENCRYPT_DECRYPT
  3. Verify key version auto-created with state ENABLED
  4. Test encrypt/decrypt operation with key

Test Data:

{
keyRingId: 'test-crypto-validation',
keyId: 'test-aes-256-001',
algorithm: 'GOOGLE_SYMMETRIC_ENCRYPTION',
protectionLevel: 'HSM',
}

Expected Result: Key created successfully, encrypt/decrypt operations succeed.

Evidence: API response JSON, successful encrypt/decrypt test output.

TC-KM-003: Key Rotation

Objective: Verify key rotation creates new version and old version remains functional.

Procedure:

  1. Create AES key with auto-rotation disabled
  2. Encrypt test data with initial key version (v1)
  3. Manually rotate key (create version v2)
  4. Verify primary version updated to v2
  5. Encrypt new data with v2
  6. Decrypt data encrypted with v1 (verify old version still decrypts)
  7. Decrypt data encrypted with v2

Expected Result:

  • Version v2 becomes primary
  • Data encrypted with v1 can still be decrypted
  • New encryptions use v2
  • Both versions remain in state ENABLED

Evidence: API responses showing version creation, decrypt operations with both versions.

TC-KM-004: Key Revocation

Objective: Verify revoked key version cannot perform cryptographic operations.

Procedure:

  1. Create ECDSA key
  2. Sign test message with key
  3. Disable key version
  4. Attempt to sign new message
  5. Verify operation fails with "key version disabled" error
  6. Verify previously created signature still verifies (revocation doesn't invalidate old signatures)

Expected Result:

  • Signing with disabled key version fails
  • Existing signatures remain valid
  • Error message clearly indicates key is disabled

Evidence: Error response JSON, verification of old signature success.

TC-KM-005: Key Destruction

Objective: Verify scheduled destruction prevents key usage after grace period.

Procedure:

  1. Create test AES key
  2. Schedule key version for destruction (24-hour grace period)
  3. Verify key version state = DESTROY_SCHEDULED
  4. Verify key still functional during grace period
  5. [Manual verification after 24h] Verify key version state = DESTROYED
  6. [Manual verification after 24h] Verify decrypt operations fail

Expected Result:

  • Key usable during grace period
  • After grace period, key version transitions to DESTROYED
  • Decrypt operations fail with "key version destroyed" error

Evidence: State transition logs, failed decrypt operation after destruction.

Note: Full test requires 24-hour wait. Automated test verifies scheduling; manual verification required for post-destruction state.

TC-KM-006: Key Access Control

Objective: Verify RBAC prevents unauthorized key usage.

Procedure:

  1. Create test key with permissions: test-user@coditect-qms-test.iam.gserviceaccount.com granted cloudkms.cryptoKeyEncrypterDecrypter
  2. Attempt to decrypt using unauthorized service account (no role granted)
  3. Verify operation fails with permission denied error
  4. Authenticate as authorized service account
  5. Verify decrypt succeeds

Expected Result:

  • Unauthorized account receives HTTP 403 Forbidden
  • Error message: "Permission 'cloudkms.cryptoKeyVersions.useToDecrypt' denied"
  • Authorized account succeeds

Evidence: Error response for unauthorized access, success response for authorized access.

TC-KM-007: Key Export Prevention

Objective: Verify HSM keys are non-exportable.

Procedure:

  1. Create HSM-backed key (protection level = HSM)
  2. Attempt to export private key via Cloud KMS API
  3. Verify operation fails (no export API exists for HSM keys)
  4. Verify public key export succeeds (asymmetric keys only)

Expected Result:

  • No API method exists to export HSM private keys
  • Public key export returns PEM-encoded key
  • Documentation confirms HSM keys are non-exportable

Evidence: API documentation reference, successful public key export.


4.2 Envelope Encryption

TC-EE-001: Encrypt Data with DEK, Wrap DEK with KEK

Objective: Verify envelope encryption workflow: generate DEK, encrypt data, wrap DEK with Cloud KMS KEK.

Procedure:

  1. Generate random 256-bit DEK (Data Encryption Key) using crypto.randomBytes(32)
  2. Encrypt test data (1KB JSON payload) with DEK using AES-256-GCM
  3. Store IV and authentication tag with ciphertext
  4. Wrap DEK using Cloud KMS KEK: keyManagementService.encrypt({ plaintext: DEK })
  5. Store wrapped DEK with encrypted data
  6. Verify ciphertext != plaintext
  7. Verify wrapped DEK != raw DEK

Test Data:

{
"patient_id": "P-12345",
"test_results": [{"assay": "ELISA", "value": 0.345}],
"timestamp": "2026-02-16T10:30:00Z"
}

Expected Result:

  • Data encrypted with DEK
  • DEK wrapped with KEK
  • Output structure: { ciphertext: Buffer, iv: Buffer, authTag: Buffer, wrappedDEK: Buffer }

Evidence: Encrypted payload JSON, wrapped DEK hex dump.

TC-EE-002: Decrypt Envelope (Unwrap DEK, Decrypt Data)

Objective: Verify envelope decryption workflow: unwrap DEK, decrypt data.

Procedure:

  1. Use encrypted data from TC-EE-001
  2. Unwrap DEK using Cloud KMS: keyManagementService.decrypt({ ciphertext: wrappedDEK })
  3. Decrypt data using unwrapped DEK with AES-256-GCM (IV and authTag from TC-EE-001)
  4. Verify authentication tag
  5. Verify decrypted plaintext matches original test data

Expected Result:

  • DEK successfully unwrapped
  • Data successfully decrypted
  • Plaintext matches original input byte-for-byte

Evidence: Decrypted JSON payload matching original.

TC-EE-003: KEK Rotation (Old DEKs Still Unwrappable)

Objective: Verify KEK rotation doesn't break existing wrapped DEKs.

Procedure:

  1. Encrypt data and wrap DEK using KEK version v1 (from TC-EE-001)
  2. Rotate KEK (create version v2, set as primary)
  3. Unwrap DEK wrapped with v1 using rotated KEK
  4. Verify unwrap succeeds (Cloud KMS automatically uses correct version)
  5. Decrypt data using unwrapped DEK
  6. Encrypt new data, wrap DEK with rotated KEK (now uses v2)
  7. Verify new DEK unwrap succeeds

Expected Result:

  • Old DEKs (wrapped with v1) remain unwrappable after rotation
  • New wraps use v2
  • Decryption succeeds for both old and new envelopes

Evidence: Successful decrypt of data encrypted before and after KEK rotation.

TC-EE-004: Large Data Encryption (100MB)

Objective: Verify envelope encryption scales to large files.

Procedure:

  1. Generate 100MB test file (random bytes)
  2. Generate DEK and wrap with KEK
  3. Encrypt file using AES-256-GCM in streaming mode (1MB chunks)
  4. Measure encryption time and memory usage
  5. Decrypt file and verify hash matches original
  6. Verify memory usage remains constant during streaming

Expected Result:

  • Encryption completes in < 30 seconds
  • Memory usage < 50MB (streaming, not buffering entire file)
  • Decrypted file hash matches original

Evidence: Performance metrics (time, memory), hash comparison output.

TC-EE-005: Concurrent Encryption Operations

Objective: Verify multiple concurrent envelope encryptions don't conflict.

Procedure:

  1. Create 10 concurrent encryption tasks (each encrypting 1MB payload)
  2. Each task generates unique DEK, encrypts data, wraps DEK
  3. Verify all 10 tasks complete successfully
  4. Verify all 10 DEKs are unique
  5. Decrypt all 10 payloads and verify correctness

Expected Result:

  • All 10 encryptions succeed
  • No DEK collisions
  • All 10 decryptions succeed
  • Total time < 5 seconds (parallelism effective)

Evidence: Concurrent task completion log, unique DEK verification.


4.3 Digital Signature Operations

TC-DS-001: Sign Document Hash with User Certificate

Objective: Verify document signing with user's ECDSA certificate.

Procedure:

  1. Prepare test document (PDF metadata + SHA-256 hash)
  2. Retrieve user's signing certificate and private key from HSM
  3. Sign document hash using ECDSA P-256
  4. Embed signature in CAdES-BES structure (ETSI TS 103 171)
  5. Include signer certificate in signature envelope
  6. Verify signature structure contains:
    • Signed hash
    • Signature value (r, s)
    • Signer certificate
    • Signing time timestamp

Test Data:

{
"document_id": "DOC-2026-001",
"document_hash": "a3b5c7...",
"signer_id": "user-001@test-org-crypto-validation",
"signing_time": "2026-02-16T10:30:00Z"
}

Expected Result:

  • Signature created successfully
  • CAdES-BES structure valid per ETSI specification
  • Signature size < 2KB

Evidence: Signed document JSON, signature structure dump.

TC-DS-002: Verify Signature with Certificate Chain

Objective: Verify signature verification validates full certificate chain (user → intermediate → root).

Procedure:

  1. Use signed document from TC-DS-001
  2. Extract signer certificate from signature envelope
  3. Build certificate chain: user cert → intermediate CA cert → root CA cert
  4. Verify root CA certificate is in trust store
  5. Verify each certificate in chain:
    • Signature valid (signed by parent CA)
    • Not expired
    • Not revoked (check CRL/OCSP)
    • Key usage allows signing
  6. Verify document signature using validated certificate

Expected Result:

  • Certificate chain validation succeeds
  • Signature verification succeeds
  • Validation result: VALID with trust chain to root CA

Evidence: Certificate chain validation log, signature verification result.

TC-DS-003: Reject Signature from Revoked Certificate

Objective: Verify signature verification fails when signer certificate is revoked.

Procedure:

  1. Issue test certificate for user test-revoked-user@test-org
  2. Sign test document with certificate
  3. Revoke certificate via internal CA (add to CRL)
  4. Publish updated CRL
  5. Attempt to verify signature
  6. Check CRL during verification
  7. Verify verification fails with "certificate revoked" error

Expected Result:

  • Verification fails
  • Error message: "Certificate revoked (CRL check failed)"
  • Error includes revocation date and reason

Evidence: CRL entry for revoked certificate, verification error response.

TC-DS-004: Reject Signature from Expired Certificate

Objective: Verify signature verification fails when certificate is expired.

Procedure:

  1. Create test certificate with 1-hour validity (notAfter = now + 1 hour)
  2. Sign test document immediately
  3. [Manual after 1 hour] Attempt to verify signature
  4. Verify verification fails with "certificate expired" error

Expected Result:

  • Signature verification fails after expiry
  • Error message: "Certificate expired (notAfter: 2026-02-16T11:30:00Z)"

Evidence: Certificate with short validity, verification error after expiry.

Note: Automated test uses certificate with notAfter in past; manual test verifies real-time expiry behavior.

TC-DS-005: Reject Signature from Wrong Tenant Certificate

Objective: Verify cross-tenant signature rejection (tenant isolation).

Procedure:

  1. Create document in tenant A (test-org-crypto-validation)
  2. Attempt to sign document using certificate issued to tenant B (test-org-b)
  3. Verify signing operation succeeds (signature cryptographically valid)
  4. Verify document repository rejects signature due to tenant mismatch
  5. Check error: "Signer certificate does not belong to document tenant"

Expected Result:

  • Signature cryptographically valid
  • Application-level tenant check rejects signature
  • Error clearly indicates tenant mismatch

Evidence: Tenant ID mismatch error, audit log entry.

TC-DS-006: Long-Term Validation (LTV) with Embedded OCSP

Objective: Verify signature includes OCSP response for long-term validation.

Procedure:

  1. Sign document with user certificate
  2. Query OCSP responder for signer certificate status
  3. Embed OCSP response in signature envelope (CAdES-T format)
  4. Include timestamp from trusted TSA (Time Stamping Authority)
  5. Verify LTV signature structure contains:
    • Signature value
    • Signer certificate
    • OCSP response
    • Timestamp token
  6. Verify signature remains verifiable even if OCSP responder becomes unavailable

Expected Result:

  • LTV signature created successfully
  • OCSP response embedded and valid
  • Signature verifiable offline (no network calls to OCSP)

Evidence: LTV signature structure dump showing embedded OCSP response.

TC-DS-007: Concurrent Signature Operations

Objective: Verify multiple concurrent signing operations don't conflict.

Procedure:

  1. Create 10 concurrent signing tasks
  2. Each task signs unique document with same user certificate
  3. All tasks use HSM-backed private key (same key handle)
  4. Verify all 10 signatures created successfully
  5. Verify all 10 signatures verify correctly
  6. Measure total time and throughput

Expected Result:

  • All 10 signatures succeed
  • Average signing time < 50ms (meets performance target from TRACK-D)
  • Throughput ≥ 200 signatures/second (10 signatures in < 50ms total)

Evidence: Concurrent task completion log, performance metrics.


4.4 Certificate Operations

TC-CO-001: Issue User Signing Certificate

Objective: Verify user certificate issuance via internal CA.

Procedure:

  1. Generate ECDSA P-256 key pair for user (CSR private key)
  2. Create Certificate Signing Request (CSR):
    • Subject: CN=test-user-001, O=test-org-crypto-validation, C=US
    • Key Usage: Digital Signature, Non-Repudiation
    • Extended Key Usage: Document Signing (1.3.6.1.5.5.7.3.36)
  3. Submit CSR to internal intermediate CA
  4. Verify CA validates CSR signature
  5. Verify CA issues certificate signed by intermediate CA
  6. Verify issued certificate:
    • Serial number unique
    • Validity period = 1 year
    • Issuer = intermediate CA DN
    • Subject matches CSR
    • Public key matches CSR
    • Extensions correct (Key Usage, EKU)

Expected Result:

  • Certificate issued successfully
  • Certificate format: X.509 v3 PEM-encoded
  • All extensions and fields correct

Evidence: Issued certificate PEM file, OpenSSL certificate dump output.

TC-CO-002: Verify Certificate Chain

Objective: Verify complete certificate chain validation (user → intermediate → root).

Procedure:

  1. Use certificate from TC-CO-001
  2. Build certificate chain:
    Root CA (self-signed)
    └─ Intermediate CA (signed by Root)
    └─ User Certificate (signed by Intermediate)
  3. Verify using OpenSSL: openssl verify -CAfile root.pem -untrusted intermediate.pem user.pem
  4. Verify programmatic validation using Node.js crypto.createVerify()
  5. Check each link:
    • User cert signature valid (verify with Intermediate CA public key)
    • Intermediate cert signature valid (verify with Root CA public key)
    • Root CA self-signature valid

Expected Result:

  • OpenSSL verify: user.pem: OK
  • Programmatic verification succeeds
  • Trust chain established to root CA

Evidence: OpenSSL verify output, validation logs.

TC-CO-003: Revoke Certificate and Verify CRL Update

Objective: Verify certificate revocation updates CRL.

Procedure:

  1. Issue test certificate (from TC-CO-001)
  2. Revoke certificate via CA admin interface:
    • Revocation reason: keyCompromise
    • Revocation date: current timestamp
  3. Trigger CRL regeneration (CA should auto-regenerate or manual trigger)
  4. Download CRL from distribution point (HTTP URL)
  5. Parse CRL and verify:
    • Revoked certificate serial number present
    • Revocation date correct
    • Revocation reason extension present
  6. Verify CRL signature valid (signed by intermediate CA)

Expected Result:

  • Certificate appears in CRL within 5 minutes of revocation
  • CRL entry contains serial number, revocation date, reason
  • CRL signature valid

Evidence: CRL file, OpenSSL CRL dump showing revoked certificate entry.

TC-CO-004: OCSP Response for Valid Certificate

Objective: Verify OCSP responder returns "good" status for valid certificate.

Procedure:

  1. Use valid certificate from TC-CO-001
  2. Construct OCSP request:
    • Certificate serial number
    • Issuer name hash
    • Issuer key hash
  3. Send OCSP request to responder URL (from certificate AIA extension)
  4. Verify OCSP response:
    • Status: good
    • Response signature valid (signed by OCSP responder certificate)
    • Responder certificate issued by same CA
    • thisUpdate and nextUpdate timestamps valid

Expected Result:

  • OCSP response status: good
  • Response received within 2 seconds
  • Response signature valid

Evidence: OCSP response ASN.1 dump, status verification log.

TC-CO-005: OCSP Response for Revoked Certificate

Objective: Verify OCSP responder returns "revoked" status for revoked certificate.

Procedure:

  1. Use revoked certificate from TC-CO-003
  2. Construct and send OCSP request
  3. Verify OCSP response:
    • Status: revoked
    • Revocation time present
    • Revocation reason present (keyCompromise)

Expected Result:

  • OCSP response status: revoked
  • Response includes revocation time and reason
  • Response received within 2 seconds

Evidence: OCSP response ASN.1 dump showing revoked status.

TC-CO-006: Certificate Renewal Before Expiry

Objective: Verify seamless certificate renewal before expiration.

Procedure:

  1. Use certificate issued in TC-CO-001 (expiry = now + 1 year)
  2. Simulate renewal 30 days before expiry (change system clock or create cert with near-expiry date)
  3. Generate new CSR with same subject DN but new key pair
  4. Submit renewal request to CA
  5. Verify CA issues new certificate:
    • New serial number
    • New validity period (1 year from renewal date)
    • Same subject DN
    • New public key
  6. Verify old certificate remains valid until expiry (both certs valid during overlap period)

Expected Result:

  • New certificate issued with fresh validity period
  • Old certificate not revoked (graceful transition)
  • Both certificates valid during overlap

Evidence: Old and new certificates with overlapping validity periods.

TC-CO-007: Cross-Tenant Certificate Rejection

Objective: Verify certificate issued to tenant A cannot be used in tenant B.

Procedure:

  1. Issue certificate to user-a@tenant-a
  2. Create document in tenant B
  3. Attempt to sign document using tenant A certificate
  4. Verify application-level check rejects operation
  5. Check error: "Certificate organization (tenant-a) does not match document tenant (tenant-b)"

Expected Result:

  • Signing operation rejected
  • Clear tenant mismatch error
  • Audit log entry created

Evidence: Tenant mismatch error response, audit log entry.


4.5 TLS Operations

TC-TLS-001: TLS 1.3 Handshake with Approved Cipher Suites

Objective: Verify TLS 1.3 connection uses approved cipher suites only.

Procedure:

  1. Configure test client to connect to QMS platform API endpoint
  2. Capture TLS handshake with openssl s_client or Wireshark
  3. Verify:
    • TLS version negotiated = 1.3
    • Cipher suite = one of:
      • TLS_AES_256_GCM_SHA384
      • TLS_CHACHA20_POLY1305_SHA256
      • TLS_AES_128_GCM_SHA256
    • Key exchange = ECDHE (ephemeral keys)
    • Certificate signature algorithm = ECDSA-P256-SHA256 or RSA-PSS-SHA256
  4. Verify forward secrecy enabled (ephemeral DH keys)

Test Command:

openssl s_client -connect api.coditect-qms-test.com:443 -tls1_3 -showcerts

Expected Result:

  • TLS 1.3 negotiation succeeds
  • Approved cipher suite used
  • Server certificate valid
  • Forward secrecy confirmed

Evidence: OpenSSL handshake output, Wireshark capture showing TLS 1.3.

TC-TLS-002: Reject TLS 1.2 and Below

Objective: Verify server rejects TLS 1.2, 1.1, 1.0 connections.

Procedure:

  1. Attempt connection with TLS 1.2: openssl s_client -connect api.coditect-qms-test.com:443 -tls1_2
  2. Verify connection refused or handshake fails
  3. Attempt connection with TLS 1.1: openssl s_client -tls1_1
  4. Attempt connection with TLS 1.0: openssl s_client -tls1
  5. Verify all legacy TLS versions rejected

Expected Result:

  • TLS 1.2 connection fails with "protocol version not supported"
  • TLS 1.1 connection fails
  • TLS 1.0 connection fails
  • Only TLS 1.3 accepted

Evidence: OpenSSL error messages showing protocol rejection.

TC-TLS-003: Mutual TLS (mTLS) with Service Certificates

Objective: Verify mutual TLS authentication between microservices.

Procedure:

  1. Configure test service A with client certificate
  2. Configure test service B to require client certificates
  3. Establish mTLS connection from A to B
  4. Verify:
    • Server (B) presents certificate to client (A)
    • Client (A) presents certificate to server (B)
    • Both certificates validated against trusted CA
    • Connection established only if both certs valid
  5. Attempt connection without client certificate
  6. Verify connection refused

Expected Result:

  • mTLS connection succeeds with valid client cert
  • Connection fails without client cert (error: "certificate required")
  • Both client and server certificates validated

Evidence: mTLS handshake logs showing client certificate verification.

TC-TLS-004: Certificate Pinning Validation

Objective: Verify client enforces certificate pinning for API connections.

Procedure:

  1. Configure test client with pinned certificate fingerprint (SHA-256 hash of server cert public key)
  2. Connect to API server
  3. Verify client validates:
    • Server certificate chain
    • Pinned fingerprint matches server cert public key hash
  4. Simulate attack: serve different valid certificate (signed by same CA)
  5. Verify client rejects connection (fingerprint mismatch)

Test Data:

const pinnedFingerprint = 'A7:3D:5F:...'; // SHA-256 hash of legitimate server cert public key

Expected Result:

  • Connection succeeds with pinned certificate
  • Connection fails with different certificate (even if CA-signed)
  • Error: "Certificate fingerprint mismatch"

Evidence: Successful connection log, fingerprint mismatch error for different cert.

TC-TLS-005: Reject Self-Signed Certificates

Objective: Verify client rejects self-signed certificates in production mode.

Procedure:

  1. Generate self-signed certificate for test server
  2. Configure test server with self-signed cert
  3. Attempt client connection with production settings (verify=true)
  4. Verify connection fails with "self-signed certificate" error
  5. [Dev mode test] Enable rejectUnauthorized=false and verify connection succeeds (confirm dev override works)

Expected Result:

  • Production mode: connection fails, error "self-signed certificate in certificate chain"
  • Dev mode: connection succeeds (override working as expected)

Evidence: Production mode error, dev mode success (confirming flag functionality).


5. Negative / Security Test Cases

TC-NEG-001: Reject MD5 Hash

Objective: Verify system rejects MD5 hash algorithm (broken, not FIPS-approved).

Procedure:

  1. Attempt to compute MD5 hash via crypto library
  2. Verify operation fails or returns error
  3. Attempt to verify signature with MD5 hash
  4. Verify verification fails

Expected Result:

  • MD5 hash function disabled or returns error
  • Error message: "MD5 algorithm not allowed (insecure)"

Evidence: Error response from hash function.

TC-NEG-002: Reject SHA-1 Signature

Objective: Verify system rejects SHA-1 signatures (collision attacks demonstrated).

Procedure:

  1. Create test certificate with signature algorithm SHA1withRSA
  2. Attempt to import certificate into trust store
  3. Verify import fails or certificate marked untrusted
  4. Attempt to verify document signature using SHA-1 hash
  5. Verify verification fails

Expected Result:

  • Certificate import fails: "SHA-1 signatures not accepted"
  • Signature verification fails: "SHA-1 hash algorithm not allowed"

Evidence: Import error message, signature verification failure.

TC-NEG-003: Reject DES/3DES Encryption

Objective: Verify system rejects legacy DES and 3DES encryption.

Procedure:

  1. Attempt to create symmetric key with algorithm DES or 3DES
  2. Verify operation fails
  3. Attempt to decrypt ciphertext encrypted with 3DES
  4. Verify decryption fails

Expected Result:

  • Key creation fails: "DES/3DES algorithms not allowed"
  • Decryption fails: "Algorithm not supported"

Evidence: Key creation error, decryption error.

TC-NEG-004: Reject RSA < 2048 Bits

Objective: Verify system rejects weak RSA keys below 2048-bit minimum.

Procedure:

  1. Generate RSA-1024 key pair outside system
  2. Attempt to import RSA-1024 private key into HSM
  3. Verify import fails
  4. Attempt to import certificate with RSA-1024 public key
  5. Verify import fails

Expected Result:

  • Key import fails: "RSA key size below minimum 2048 bits"
  • Certificate import fails: "Weak RSA key (1024 bits)"

Evidence: Import error messages.

TC-NEG-005: Reject Expired Certificates

Objective: Verify certificate validation fails for expired certificates.

Procedure:

  1. Create test certificate with notAfter = 1 day ago
  2. Attempt to use certificate for signing
  3. Verify operation fails
  4. Attempt to verify signature with expired certificate
  5. Verify verification fails

Expected Result:

  • Signing fails: "Certificate expired"
  • Verification fails: "Certificate expired (notAfter: 2026-02-15T00:00:00Z)"

Evidence: Expired certificate validation errors.

TC-NEG-006: Detect Tampered Ciphertext (GCM Auth Tag Failure)

Objective: Verify AES-GCM detects ciphertext tampering via authentication tag.

Procedure:

  1. Encrypt test data with AES-256-GCM (from TC-EE-001)
  2. Flip one bit in ciphertext (e.g., byte 10, bit 3)
  3. Attempt decryption with original IV and auth tag
  4. Verify decryption fails with authentication error
  5. Verify no plaintext returned (fail-fast on auth failure)

Expected Result:

  • Decryption fails immediately after auth tag verification
  • Error: "Authentication tag mismatch (ciphertext tampered)"
  • No plaintext leaked before authentication

Evidence: Authentication failure error, verification that plaintext not returned.

TC-NEG-007: Detect Tampered Signature

Objective: Verify signature verification detects tampered signature values.

Procedure:

  1. Create valid signature (from TC-DS-001)
  2. Flip one bit in signature value (modify r or s component)
  3. Attempt signature verification
  4. Verify verification fails

Expected Result:

  • Verification fails: "Signature verification failed"
  • No false positive acceptance

Evidence: Signature verification failure log.

TC-NEG-008: Reject Null/Empty Encryption Key

Objective: Verify system rejects null or empty encryption keys.

Procedure:

  1. Attempt to encrypt data with null key: key = null
  2. Attempt to encrypt data with empty buffer: key = Buffer.alloc(0)
  3. Attempt to encrypt data with key of incorrect size: key = Buffer.alloc(16) (128-bit instead of 256-bit)
  4. Verify all operations fail with validation error

Expected Result:

  • Null key: "Encryption key is null or undefined"
  • Empty key: "Encryption key length invalid (expected 32 bytes, got 0)"
  • Wrong size: "Encryption key length invalid (expected 32 bytes, got 16)"

Evidence: Validation error messages.

TC-NEG-009: Reject Reused AES-GCM Nonce

Objective: Verify system prevents catastrophic AES-GCM nonce reuse.

Procedure:

  1. Encrypt data A with key K and IV I1
  2. Encrypt data B with same key K and same IV I1
  3. Verify system either:
    • Auto-generates new random IV for second encryption (preferred), OR
    • Rejects second encryption with error "IV reuse detected"
  4. Verify application tracks used IVs per key (nonce reuse detection)

Expected Result:

  • System auto-generates unique IV for each encryption, OR
  • System rejects reuse with error "IV/nonce reuse with same key not allowed"

Evidence: Encryption logs showing unique IVs, or IV reuse rejection error.

Note: IV reuse with AES-GCM completely breaks confidentiality. System must prevent this.

TC-NEG-010: Timing Attack Resistance (Constant-Time Comparison)

Objective: Verify cryptographic comparisons use constant-time algorithms (timing attack mitigation).

Procedure:

  1. Prepare correct HMAC value
  2. Prepare 1000 incorrect HMAC values with differences at each byte position (0-31)
  3. Measure verification time for each of 1000 comparisons
  4. Compute mean and standard deviation of verification times
  5. Verify standard deviation < 1% of mean time (confirms constant-time comparison)
  6. Repeat test 10 times to confirm consistency

Test Setup:

const correctHMAC = Buffer.from('A3B5C7D9...', 'hex');
const incorrectHMACs = generateIncorrectHMACs(correctHMAC, 1000);
const times = incorrectHMACs.map(hmac => measureVerificationTime(hmac, correctHMAC));
const stddev = calculateStdDev(times);
const mean = calculateMean(times);
assert(stddev / mean < 0.01, 'Timing variance exceeds 1% - potential timing leak');

Expected Result:

  • Verification time variance < 1% (constant-time confirmed)
  • No correlation between byte position of difference and verification time

Evidence: Timing analysis data, statistical analysis output.


6. Performance Benchmark Suite

6.1 Performance Targets

OperationTarget Latency (p95)Target Throughput
ECDSA P-256 Sign< 50ms≥ 20 ops/sec
ECDSA P-256 Verify< 30ms≥ 30 ops/sec
AES-256-GCM Encrypt (1KB)< 5ms≥ 200 ops/sec
AES-256-GCM Decrypt (1KB)< 5ms≥ 200 ops/sec
SHA-256 Hash (1KB)< 1ms≥ 1000 ops/sec
HSM Key Sign< 100ms≥ 10 ops/sec
Certificate Chain Validation< 200ms≥ 5 ops/sec

6.2 Benchmark Test Cases

TC-PERF-001: ECDSA P-256 Sign Latency

Objective: Measure ECDSA signature generation latency distribution.

Procedure:

  1. Prepare 1000 unique test messages (1KB each)
  2. Load ECDSA P-256 private key from HSM
  3. Warm-up: Sign 100 messages (exclude from measurements)
  4. Benchmark: Sign 1000 messages, record latency for each
  5. Compute percentiles: p50, p90, p95, p99, max
  6. Verify p95 < 50ms (target)

Test Code:

const messages = generateTestMessages(1000, 1024);
const privateKey = await loadHSMKey('test-ecdsa-p256-001');

// Warm-up
for (let i = 0; i < 100; i++) {
await signMessage(messages[i], privateKey);
}

// Benchmark
const latencies: number[] = [];
for (const message of messages) {
const start = performance.now();
await signMessage(message, privateKey);
const end = performance.now();
latencies.push(end - start);
}

const stats = calculatePercentiles(latencies);
console.log(`p50: ${stats.p50}ms, p95: ${stats.p95}ms, p99: ${stats.p99}ms`);
assert(stats.p95 < 50, `ECDSA sign p95 latency ${stats.p95}ms exceeds target 50ms`);

Expected Result:

  • p50 < 30ms
  • p95 < 50ms
  • p99 < 80ms

Evidence: Latency distribution histogram, percentile table.

TC-PERF-002: ECDSA P-256 Verify Latency

Objective: Measure ECDSA signature verification latency.

Procedure:

  1. Pre-generate 1000 signed messages (from TC-PERF-001)
  2. Load ECDSA P-256 public key
  3. Warm-up: Verify 100 signatures
  4. Benchmark: Verify 1000 signatures, record latency for each
  5. Compute percentiles
  6. Verify p95 < 30ms

Expected Result:

  • p50 < 15ms
  • p95 < 30ms
  • p99 < 50ms

Evidence: Latency distribution histogram.

TC-PERF-003: AES-256-GCM Encrypt Latency (Variable Data Size)

Objective: Measure AES-256-GCM encryption latency for different data sizes.

Test Data Sizes: 1KB, 10KB, 100KB, 1MB, 10MB, 100MB

Procedure:

  1. For each data size:
    • Generate test data
    • Generate random DEK
    • Warm-up: Encrypt 10 times
    • Benchmark: Encrypt 100 times, record latency
    • Compute p50, p95, p99
  2. Verify 1KB p95 < 5ms

Expected Results:

Data Sizep50 Latencyp95 Latencyp99 Latency
1KB< 1ms< 5ms< 10ms
10KB< 5ms< 10ms< 20ms
100KB< 20ms< 50ms< 80ms
1MB< 100ms< 200ms< 300ms
10MB< 800ms< 1500ms< 2000ms
100MB< 8s< 15s< 20s

Evidence: Latency vs. data size chart, percentile table.

TC-PERF-004: AES-256-GCM Decrypt Latency

Objective: Measure AES-256-GCM decryption latency (same data sizes as TC-PERF-003).

Procedure: Same as TC-PERF-003 but decrypt instead of encrypt.

Expected Results: Similar to encryption (decryption typically same speed or slightly faster).

Evidence: Latency vs. data size chart.

TC-PERF-005: SHA-256 Hash Latency

Objective: Measure SHA-256 hashing latency for different data sizes.

Test Data Sizes: 1KB, 10KB, 100KB, 1MB, 10MB, 100MB

Procedure:

  1. For each data size:
    • Generate test data
    • Warm-up: Hash 10 times
    • Benchmark: Hash 1000 times, record latency
    • Compute percentiles
  2. Verify 1KB p95 < 1ms

Expected Results:

Data Sizep50 Latencyp95 Latencyp99 Latency
1KB< 0.5ms< 1ms< 2ms
10KB< 2ms< 5ms< 10ms
100KB< 15ms< 30ms< 50ms
1MB< 100ms< 200ms< 300ms
10MB< 1s< 2s< 3s
100MB< 10s< 15s< 20s

Evidence: Latency vs. data size chart.

TC-PERF-006: HSM Key Sign Operation Latency

Objective: Measure end-to-end HSM signing latency (includes network round-trip to Cloud KMS).

Procedure:

  1. Prepare 1000 test messages
  2. Warm-up: Sign 50 messages via HSM
  3. Benchmark: Sign 1000 messages, record latency
  4. Compute percentiles
  5. Verify p95 < 100ms

Expected Result:

  • p50 < 50ms
  • p95 < 100ms
  • p99 < 200ms

Note: HSM operations include network latency to Google Cloud KMS. Higher latency than local crypto.

Evidence: Latency distribution, comparison with local signing latency.

TC-PERF-007: Certificate Chain Validation Latency

Objective: Measure certificate chain validation latency (user → intermediate → root).

Procedure:

  1. Prepare 100 user certificates (unique, all valid)
  2. Build certificate chains for each
  3. Warm-up: Validate 20 chains
  4. Benchmark: Validate 100 chains, record latency
  5. Compute percentiles
  6. Verify p95 < 200ms

Expected Result:

  • p50 < 100ms
  • p95 < 200ms
  • p99 < 300ms

Evidence: Latency distribution.

TC-PERF-008: Concurrent Signing Throughput

Objective: Measure signature throughput under concurrent load.

Concurrency Levels: 10, 50, 100 concurrent signing operations

Procedure:

  1. For each concurrency level:
    • Spawn N concurrent tasks (each signs 100 messages)
    • Measure total time to complete all tasks
    • Compute throughput: (N * 100) / total_time
    • Measure individual operation latency (p50, p95)
  2. Verify throughput scales linearly up to 50 concurrent

Expected Results:

ConcurrencyThroughput (ops/sec)p50 Latencyp95 Latency
10≥ 200< 50ms< 80ms
50≥ 500< 100ms< 150ms
100≥ 700< 150ms< 250ms

Evidence: Throughput vs. concurrency chart, latency distribution at each level.

TC-PERF-009: Envelope Encrypt/Decrypt Latency

Objective: Measure end-to-end envelope encryption latency (DEK generation + data encrypt + DEK wrap).

Test Data: 1KB payload

Procedure:

  1. Benchmark envelope encryption (1000 iterations):
    • Generate random DEK (32 bytes)
    • Encrypt data with DEK (AES-256-GCM)
    • Wrap DEK with HSM KEK
    • Record total latency
  2. Benchmark envelope decryption (1000 iterations):
    • Unwrap DEK with HSM KEK
    • Decrypt data with DEK
    • Record total latency
  3. Compute percentiles for each operation

Expected Results:

Operationp50 Latencyp95 Latencyp99 Latency
Envelope Encrypt< 60ms< 120ms< 200ms
Envelope Decrypt< 60ms< 120ms< 200ms

Note: Latency dominated by HSM wrap/unwrap operations (~50ms each).

Evidence: Latency breakdown (DEK gen, encrypt, wrap times), percentile table.


6.3 Performance Benchmark Results Template

Test Execution Date: _______________ Test Environment: _______________ HSM Region: _______________ GKE Cluster: _______________ Node Type: _______________

Test CaseOperationData SizeIterationsp50 (ms)p90 (ms)p95 (ms)p99 (ms)Max (ms)Target (p95)Pass/Fail
TC-PERF-001ECDSA Sign1KB1000< 50ms
TC-PERF-002ECDSA Verify1KB1000< 30ms
TC-PERF-003AES Encrypt1KB1000< 5ms
TC-PERF-003AES Encrypt1MB100< 200ms
TC-PERF-003AES Encrypt100MB10< 15s
TC-PERF-004AES Decrypt1KB1000< 5ms
TC-PERF-004AES Decrypt1MB100< 200ms
TC-PERF-005SHA-256 Hash1KB1000< 1ms
TC-PERF-005SHA-256 Hash1MB1000< 200ms
TC-PERF-006HSM Sign1KB1000< 100ms
TC-PERF-007Cert Chain ValidationN/A100< 200ms
TC-PERF-008Concurrent Sign (10)1KB1000< 80ms
TC-PERF-008Concurrent Sign (50)1KB5000< 150ms
TC-PERF-008Concurrent Sign (100)1KB10000< 250ms
TC-PERF-009Envelope Encrypt1KB1000< 120ms
TC-PERF-009Envelope Decrypt1KB1000< 120ms

Summary:

  • Total Tests: 15
  • Passed: _______
  • Failed: _______
  • Pass Rate: _______

Regressions Detected: (List any performance regressions compared to baseline)

Signatures:

  • Tested By: _________________ Date: _______
  • Reviewed By: _________________ Date: _______

7. Compliance Traceability Matrix

Regulatory RequirementDescriptionTest Case(s)Expected Evidence
FDA 21 CFR §11.10(a)Validation of systemsAll NIST KAT testsTest execution report with 100% pass
FDA 21 CFR §11.10(c)Integrity checksTC-DS-001, TC-DS-002, TC-NEG-006, TC-NEG-007Valid signatures, tamper detection logs
FDA 21 CFR §11.50(a)(1)Signed records contain identityTC-DS-001, TC-CO-001Signature envelope with signer certificate
FDA 21 CFR §11.50(a)(2)Signed records contain date/timeTC-DS-001Signature envelope with trusted timestamp
FDA 21 CFR §11.50(b)Signature uniquely linked to recordTC-DS-002, TC-DS-005Signature verification, tenant isolation
FDA 21 CFR §11.70Signature/record linkingTC-DS-001, TC-DS-002Document hash in signature, chain validation
FDA 21 CFR §11.300Non-repudiation controlsTC-DS-006LTV signatures with embedded OCSP
HIPAA §164.312(a)(2)(iv)Encryption at restTC-EE-001, TC-EE-002, TC-NIST-AES-001Encrypted data, envelope encryption workflow
HIPAA §164.312(e)(1)Encryption in transitTC-TLS-001, TC-TLS-002, TC-TLS-003TLS 1.3 handshake, mTLS validation
HIPAA §164.312(c)(1)Integrity controlsTC-NEG-006, TC-NEG-007GCM auth tag verification, signature tampering detection
SOC 2 CC6.1Logical access controlsTC-KM-006, TC-CO-007RBAC enforcement, cross-tenant rejection
SOC 2 CC6.6Encryption for confidentialityTC-NIST-AES-001, TC-EE-001AES-256-GCM encryption, HSM key protection
SOC 2 CC6.7Encryption key managementTC-KM-001 to TC-KM-007Key lifecycle operations, HSM non-exportability
NIST FIPS 140-2Cryptographic module validationAll NIST KAT tests100% match with NIST test vectors
NIST SP 800-57Key management practicesTC-KM-003, TC-KM-004, TC-KM-005Key rotation, revocation, destruction
NIST SP 800-52TLS guidelinesTC-TLS-001, TC-TLS-002TLS 1.3 only, approved cipher suites
NIST SP 800-63BDigital authenticationTC-CO-002, TC-CO-004Certificate chain validation, OCSP

8. Test Environment Setup

8.1 Prerequisites Checklist

  • Google Cloud Project: coditect-qms-test provisioned
  • Cloud KMS Keyring: test-crypto-validation created in us-central1
  • GKE Cluster: Dev/staging cluster running with API pods
  • Test Tenant: Organization test-org-crypto-validation created in database
  • Service Accounts: Test service accounts with appropriate KMS roles
  • PKI Infrastructure: Test root CA and intermediate CA certificates generated
  • NIST Test Vectors: Downloaded from NIST CAVP to test-data/nist-vectors/
  • Node.js Environment: v18+ installed, dependencies via npm install
  • OpenSSL: v3.0+ available in PATH
  • gcloud CLI: Authenticated with project access

8.2 Environment Configuration

Create test-env.json:

{
"gcp": {
"projectId": "coditect-qms-test",
"region": "us-central1",
"kms": {
"keyRingId": "test-crypto-validation",
"location": "us-central1"
}
},
"tenant": {
"orgId": "test-org-crypto-validation",
"isolation": "strict"
},
"pki": {
"rootCA": "./test-data/pki/root-ca.pem",
"intermediateCA": "./test-data/pki/intermediate-ca.pem",
"crlUrl": "http://crl.coditect-qms-test.com/intermediate.crl",
"ocspUrl": "http://ocsp.coditect-qms-test.com"
},
"performance": {
"warmupIterations": 100,
"benchmarkIterations": 1000,
"timeoutMs": 30000
}
}

8.3 Test Data Preparation

# Create test data directory structure
mkdir -p test-data/{nist-vectors,pki,performance}

# Download NIST test vectors
curl -o test-data/nist-vectors/ecdsa-p256.zip \
https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/dss/186-3ecdsatestvectors.zip
unzip test-data/nist-vectors/ecdsa-p256.zip -d test-data/nist-vectors/

curl -o test-data/nist-vectors/aes-gcm.zip \
https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmtestvectors.zip
unzip test-data/nist-vectors/aes-gcm.zip -d test-data/nist-vectors/

# Generate test PKI
cd test-data/pki
openssl req -x509 -newkey rsa:4096 -keyout root-ca-key.pem -out root-ca.pem \
-days 3650 -nodes -subj "/CN=Test Root CA/O=CODITECT Test/C=US"

openssl req -newkey rsa:4096 -keyout intermediate-ca-key.pem -out intermediate-ca.csr \
-nodes -subj "/CN=Test Intermediate CA/O=CODITECT Test/C=US"

openssl x509 -req -in intermediate-ca.csr -CA root-ca.pem -CAkey root-ca-key.pem \
-CAcreateserial -out intermediate-ca.pem -days 1825 \
-extfile <(echo "basicConstraints=CA:TRUE,pathlen:0\nkeyUsage=keyCertSign,cRLSign")

8.4 Cleanup Procedures

# Delete test keys from Cloud KMS (after test execution)
gcloud kms keys list --keyring=test-crypto-validation --location=us-central1 \
--format="value(name)" | while read key; do
# Schedule all versions for destruction
gcloud kms keys versions list --key="$key" --location=us-central1 \
--format="value(name)" | while read version; do
gcloud kms keys versions destroy "$version" --location=us-central1
done
done

# Drop test tenant data from database
psql -h localhost -U postgres -d coditect_qms_test -c \
"DELETE FROM documents WHERE tenant_id = 'test-org-crypto-validation';"

# Remove test data files
rm -rf test-data/performance/*.json
rm -rf test-data/evidence/*

8.5 CI/CD Integration

GitHub Actions Workflow (.github/workflows/crypto-validation.yml):

name: Cryptographic Validation Tests

on:
pull_request:
paths:
- 'src/crypto/**'
- 'src/pki/**'
schedule:
- cron: '0 2 * * *' # Nightly at 2 AM UTC

jobs:
nist-kat-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run NIST KAT Tests
run: npm test -- --testPathPattern=nist-kat
env:
TEST_ENV: ci
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v3
with:
name: nist-kat-results
path: test-results/nist-kat/

operational-tests:
runs-on: ubuntu-latest
needs: nist-kat-tests
steps:
- uses: actions/checkout@v3
- uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_TEST_SA_KEY }}
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run Operational Tests
run: npm test -- --testPathPattern=operational
env:
TEST_ENV: ci
GCP_PROJECT: coditect-qms-test

performance-tests:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' # Only nightly
steps:
- uses: actions/checkout@v3
- uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_TEST_SA_KEY }}
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run Performance Benchmarks
run: npm test -- --testPathPattern=performance
env:
TEST_ENV: ci
- name: Compare with Baseline
run: node scripts/compare-performance-baseline.js
- name: Upload Performance Results
uses: actions/upload-artifact@v3
with:
name: performance-results
path: test-results/performance/

Which Tests Run When:

EventTest SetDurationBlocking
Every PRNIST KAT + Unit Tests~5 minYes (must pass)
Crypto Code PRNIST KAT + Operational~15 minYes
NightlyFull Suite (NIST + Operational + Performance)~45 minNo (report only)
Pre-ReleaseFull Suite + Manual IQ/OQ/PQ~2 hoursYes

9. Test Execution Procedures

9.1 Installation Qualification (IQ) Test Set

Objective: Verify cryptographic system components are correctly installed and configured.

Test Set:

  • All NIST KAT tests (TC-NIST-*)
  • TC-KM-001: HSM key generation
  • TC-TLS-001: TLS 1.3 connectivity
  • TC-CO-001: Certificate issuance

Pass Criteria: 100% pass rate, all NIST vectors match exactly.

Evidence Required:

  • Test execution report with timestamps
  • NIST vector comparison results
  • HSM connectivity verification

Frequency: After initial installation, after system updates, after HSM configuration changes.


9.2 Operational Qualification (OQ) Test Set

Objective: Verify cryptographic operations function correctly in operational scenarios.

Test Set:

  • All operational tests (TC-KM-*, TC-EE-*, TC-DS-*, TC-CO-*, TC-TLS-*)
  • All negative security tests (TC-NEG-*)

Pass Criteria: 100% pass rate, all error conditions handled correctly.

Evidence Required:

  • Test execution report
  • Sample signed documents
  • Certificate chain validation logs
  • HSM operation logs
  • Security test results (rejected weak algorithms)

Frequency: After initial installation, quarterly, after major system updates.


9.3 Performance Qualification (PQ) Test Set

Objective: Verify cryptographic operations meet performance targets under load.

Test Set:

  • All performance benchmarks (TC-PERF-*)

Pass Criteria: ≥95% of operations meet target latency (p95).

Evidence Required:

  • Performance benchmark report (percentile table)
  • Latency distribution histograms
  • Throughput vs. concurrency charts
  • Comparison with baseline (regression check)

Frequency: After initial installation, semi-annually, after infrastructure changes (HSM region move, GKE cluster upgrade).


9.4 Re-validation Triggers

Re-run appropriate test sets when:

ChangeTest Set RequiredRationale
System software update (Node.js, crypto libraries)IQ (NIST KAT)Verify algorithm implementations unchanged
HSM configuration change (key rotation policy, new keyring)IQ + OQ (key management)Verify HSM operations correct
Certificate infrastructure change (new CA, CRL URL)OQ (certificate operations)Verify PKI workflows correct
Infrastructure migration (GKE cluster, HSM region)PQ (performance)Verify performance maintained
Regulatory auditFull suite (IQ + OQ + PQ)Comprehensive validation evidence
Security incidentOQ (security tests) + incident-specific testsVerify mitigations effective

9.5 Evidence Collection

For each test execution, capture:

  1. Test Execution Report (PDF):

    • Test date/time
    • Tester name
    • Environment details (GCP project, cluster, HSM keyring)
    • Test results summary (pass/fail counts)
    • Individual test case results with evidence references
  2. Test Logs (Archived):

    • Console output from test runner
    • Application logs during test execution
    • HSM operation logs from Cloud KMS
    • Network traces (for TLS tests)
  3. Performance Metrics (CSV + Charts):

    • Raw latency measurements
    • Percentile calculations
    • Throughput measurements
    • Comparison with baseline
  4. Digital Signature (Detached):

    • Test execution report signed by QA lead
    • Signature includes timestamp from trusted TSA
    • Evidence stored in: gs://coditect-qms-validation/crypto-test-results/YYYY-MM-DD/
  5. Screenshots (for critical operations):

    • Cloud KMS console showing created keys
    • Certificate chain validation output
    • OCSP response for revoked certificate
    • Performance dashboard showing benchmark results

10. Test Execution Report Template

CODITECT Biosciences QMS Platform Cryptographic Operations Validation Test Execution Report


Test Execution ID: CRYPTO-TEST-__________ Execution Date: __________ Executed By: __________ Reviewed By: __________ Approved By: __________


Test Environment

ParameterValue
GCP Project
GKE Cluster
KMS Keyring
Region
Test Tenant
Node.js Version
OpenSSL Version

Test Results Summary

Test SetTotal TestsPassedFailedPass Rate
NIST KAT Tests26
Operational Tests35
Security Tests10
Performance Tests15
TOTAL86

Failed Tests (if any)

Test Case IDTest NameFailure ReasonSeverityMitigation

Performance Results

Test CaseOperationp95 LatencyTargetPass/Fail
TC-PERF-001ECDSA Sign< 50ms
TC-PERF-002ECDSA Verify< 30ms
TC-PERF-003AES Encrypt (1KB)< 5ms
TC-PERF-006HSM Sign< 100ms
TC-PERF-007Cert Chain Validation< 200ms

Compliance Confirmation

  • All NIST test vectors match exactly (100%)
  • All weak algorithms rejected (MD5, SHA-1, DES, RSA-1024)
  • Tampered data detected (GCM auth tag, signature verification)
  • Certificate chain validation enforced
  • HSM keys non-exportable
  • Performance targets met (≥95% of operations)

Evidence Attachments

  1. Test execution logs: evidence/test-logs-YYYY-MM-DD.zip
  2. Performance metrics: evidence/performance-results.csv
  3. NIST vector comparison: evidence/nist-kat-results.json
  4. Screenshots: evidence/screenshots/
  5. Digital signature: evidence/test-report-signature.p7s

Signatures

RoleNameSignatureDate
Executed By_________________________
Reviewed By_________________________
Approved By_________________________

Digital Signature of This Report: Signed by: __________ Signature File: test-report-signature.p7s Verification Command: openssl smime -verify -in test-report-signature.p7s -CAfile root-ca.pem


11. Appendices

Appendix A: NIST Test Vector Sources

AlgorithmDocumentURL
ECDSA P-256FIPS 186-4, CAVP ECDSAhttps://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/digital-signatures
AES-256-GCMNIST SP 800-38D, CAVP GCMhttps://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/block-ciphers
SHA-256FIPS 180-4, CAVP SHAhttps://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing
RSA-2048FIPS 186-4, CAVP RSAhttps://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/digital-signatures
HMAC-SHA256FIPS 198-1, RFC 4231https://datatracker.ietf.org/doc/html/rfc4231

Appendix B: Glossary

TermDefinition
AADAdditional Authenticated Data - unencrypted data authenticated by GCM mode
AESAdvanced Encryption Standard (FIPS 197)
CAdESCMS Advanced Electronic Signatures (ETSI TS 103 171)
CRLCertificate Revocation List
CSRCertificate Signing Request
DEKData Encryption Key (used to encrypt data in envelope encryption)
ECDHElliptic Curve Diffie-Hellman (key agreement)
ECDSAElliptic Curve Digital Signature Algorithm
GCMGalois/Counter Mode (authenticated encryption)
HMACHash-based Message Authentication Code
HSMHardware Security Module
IVInitialization Vector (nonce for AES-GCM)
KATKnown Answer Test (test with published expected results)
KEKKey Encryption Key (used to wrap DEKs in envelope encryption)
KMSKey Management Service (Google Cloud KMS)
LTVLong-Term Validation (signature with embedded revocation info)
mTLSMutual TLS (both client and server authenticate)
NISTNational Institute of Standards and Technology
OCSPOnline Certificate Status Protocol
PEMPrivacy-Enhanced Mail (Base64-encoded certificate format)
PKIPublic Key Infrastructure
PSSProbabilistic Signature Scheme (RSA padding)
SHASecure Hash Algorithm
TLSTransport Layer Security
TSATime Stamping Authority

Appendix C: References

  1. NIST FIPS 140-2: Security Requirements for Cryptographic Modules
  2. NIST FIPS 180-4: Secure Hash Standard (SHS)
  3. NIST FIPS 186-4: Digital Signature Standard (DSS)
  4. NIST FIPS 197: Advanced Encryption Standard (AES)
  5. NIST FIPS 198-1: The Keyed-Hash Message Authentication Code (HMAC)
  6. NIST SP 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM)
  7. NIST SP 800-52 Rev. 2: Guidelines for the Selection, Configuration, and Use of TLS
  8. NIST SP 800-57 Part 1 Rev. 5: Recommendation for Key Management
  9. RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile
  10. RFC 6960: X.509 Internet Public Key Infrastructure Online Certificate Status Protocol (OCSP)
  11. RFC 6979: Deterministic Usage of DSA and ECDSA
  12. RFC 4231: Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512
  13. ETSI TS 103 171: CAdES Baseline Profile
  14. FDA 21 CFR Part 11: Electronic Records; Electronic Signatures
  15. HIPAA Security Rule: 45 CFR Part 164 Subpart C

END OF DOCUMENT

Document Control:

  • Prepared by: Claude (Opus 4.6) on behalf of CODITECT Biosciences QMS Security Team
  • Version: 1.0.0
  • Classification: Internal - Validation
  • Next Review: Annual or upon cryptographic system changes