Skip to content

Instantly share code, notes, and snippets.

View vikramacharya's full-sized avatar

Vikram Acharya vikramacharya

View GitHub Profile
import datetime
def create_signing_string(digest_base64, created=None, expires=None):
if created is None:
created = int(datetime.datetime.now().timestamp())
if expires is None:
expires = int((datetime.datetime.now() + datetime.timedelta(hours=1)).timestamp())
signing_string = f"""(created): {created}
(expires): {expires}
digest: BLAKE-512={digest_base64}"""
import base64
import datetime
import os
import re
import json
import nacl.encoding
import nacl.hash
from nacl.bindings import crypto_sign_ed25519_sk_to_seed
from nacl.signing import SigningKey, VerifyKey
import base64
import datetime
import os
import re
import json
import nacl.encoding
import nacl.hash
from nacl.bindings import crypto_sign_ed25519_sk_to_seed
from nacl.signing import SigningKey, VerifyKey
{
"context": {
"domain": "nic2004:52110",
"action": "search",
"country": "IND",
"city": "std:080",
"core_version": "1.0.0",
"bpp_id": "",
"bpp_uri": "",
"bap_id": "bap_subcriber_id",
Authorization : Signature keyId="{subscriber_id}|{unique_key_id}|{algorithm}",algorithm="ed25519",created="1606970629",expires="1607030629",headers="(created) (expires) digest",signature="Base64(ed25519_sign(signing string))"
import sodium, { base64_variants } from "libsodium-wrappers";
const created = Math.floor(new Date().getTime() / 1000).toString();
const expires = (parseInt(created) + (1 * 60 * 60)).toString();
const digest = sodium.crypto_generichash(64, sodium.from_string(message));
const digest_base64 = sodium.to_base64(digest, base64_variants.ORIGINAL);
const signing_string = `(created): ${created}
(expires): ${expires}
digest: BLAKE-512=${digest_base64}`;
const signedMessage = sodium.crypto_sign_detached(signing_string, sodium.from_base64(privateKey, base64_variants.ORIGINAL));
const signedMessage_ = sodium.to_base64(signedMessage, base64_variants.ORIGINAL);