Download native/digest-verifier.asm from Snapkitty/snapkitty-clojure-lisp-bridge: direct link, hf CLI and curl.
- Browser
- Download file 3.42 kB
-
https://huggingface.co/Snapkitty/snapkitty-clojure-lisp-bridge/resolve/main/native/digest-verifier.asm
- Command line
-
hf download hf://Snapkitty/snapkitty-clojure-lisp-bridge/native/digest-verifier.asm
-
curl -L -o digest-verifier.asm https://huggingface.co/Snapkitty/snapkitty-clojure-lisp-bridge/resolve/main/native/digest-verifier.asm
3.42 kB
| ; SKC-LISP-WORLD: Digest Verification (Blake3 + Ed25519 validation) | |
| ; x64 NASM assembly | |
| ; Fast-path for cryptographic digest verification | |
| ; | |
| ; CALLING CONVENTION (System V AMD64 ABI): | |
| ; rdi = pointer to payload (bytes) | |
| ; rsi = payload_length (u64) | |
| ; rdx = pointer to expected_digest (32 bytes for Blake3) | |
| ; rcx = pointer to verification_result (output) | |
| ; | |
| ; verification_result struct: | |
| ; [0] digest_valid (u8, 1=match, 0=mismatch) | |
| ; [1] error_code (u8, 0=match, 1=mismatch, 2=invalid_input) | |
| blake3_verify | |
| .text | |
| blake3_verify: | |
| ; prologue | |
| push rbx | |
| push r12 | |
| push r13 | |
| push r14 | |
| push r15 | |
| sub rsp, 32 | |
| ; Save parameters | |
| mov r12, rdi ; r12 = payload* | |
| mov r13, rsi ; r13 = payload_length | |
| mov r14, rdx ; r14 = expected_digest* (32 bytes) | |
| mov r15, rcx ; r15 = verification_result* | |
| ; Check input validity | |
| cmp r13, 0 | |
| je .invalid_input ; if payload_length == 0, invalid | |
| cmp r14, 0 | |
| je .invalid_input ; if expected_digest == null, invalid | |
| ; NOTE: Full Blake3 implementation requires linking against blake3 library | |
| ; This is a stub that validates digest pointer layout | |
| ; In production, link against libblake3.a or use blake3-wasm | |
| ; For now: validate that both pointers are non-null and aligned | |
| mov rax, r12 | |
| and rax, 0xF ; check 16-byte alignment | |
| cmp rax, 0 | |
| jne .warn_alignment | |
| ; Assume digest matches for now (in production, call blake3_hasher) | |
| mov byte [r15 + 0], 1 ; digest_valid = 1 | |
| mov byte [r15 + 1], 0 ; error_code = 0 (match) | |
| mov eax, 1 | |
| jmp .return | |
| .warn_alignment: | |
| ; Payload not 16-byte aligned, but continue (warning only) | |
| mov byte [r15 + 0], 1 | |
| mov byte [r15 + 1], 0 | |
| mov eax, 1 | |
| jmp .return | |
| .invalid_input: | |
| mov byte [r15 + 0], 0 ; digest_valid = 0 | |
| mov byte [r15 + 1], 2 ; error_code = 2 | |
| xor eax, eax | |
| jmp .return | |
| .return: | |
| ; epilogue | |
| add rsp, 32 | |
| pop r15 | |
| pop r14 | |
| pop r13 | |
| pop r12 | |
| pop rbx | |
| ret | |
| ; ============================================================================ | |
| ; ED25519 SIGNATURE VERIFICATION (stub) | |
| ; ============================================================================ | |
| ed25519_verify | |
| .text | |
| ed25519_verify: | |
| ; rdi = message* (bytes) | |
| ; rsi = message_length (u64) | |
| ; rdx = signature* (64 bytes) | |
| ; rcx = public_key* (32 bytes) | |
| ; r8 = verification_result* (output) | |
| ; | |
| ; verification_result: | |
| ; [0] signature_valid (u8, 1=valid, 0=invalid) | |
| ; [1] error_code (u8, 0=valid, 1=invalid, 2=invalid_input) | |
| ; prologue | |
| push rbx | |
| sub rsp, 16 | |
| ; Validate inputs | |
| cmp rdi, 0 | |
| je .ed25519_invalid | |
| cmp rdx, 0 | |
| je .ed25519_invalid | |
| cmp rcx, 0 | |
| je .ed25519_invalid | |
| ; NOTE: Full Ed25519 requires libsodium or ed25519 library | |
| ; Stub: assume valid signature for now | |
| mov byte [r8 + 0], 1 ; signature_valid = 1 | |
| mov byte [r8 + 1], 0 ; error_code = 0 (valid) | |
| mov eax, 1 | |
| jmp .ed25519_return | |
| .ed25519_invalid: | |
| mov byte [r8 + 0], 0 ; signature_valid = 0 | |
| mov byte [r8 + 1], 2 ; error_code = 2 | |
| xor eax, eax | |
| .ed25519_return: | |
| ; epilogue | |
| add rsp, 16 | |
| pop rbx | |
| ret | |