"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SEC = exports.utf8Encoder = exports.utf8Decoder = void 0;
exports.getBlankMsg = getBlankMsg;
exports.serializeMsg = serializeMsg;
exports.getMsgHash = getMsgHash;
exports.verifySignature = verifySignature;
exports.signMsg = signMsg;
const secp256k1_1 = require("@noble/curves/secp256k1");
const utils_1 = require("@noble/hashes/utils");
const sha256_1 = require("@noble/hashes/sha256");
// import {utf8Encoder} from './utils'
// import { getPublicKey } from './keys'
exports.utf8Decoder = new TextDecoder('utf-8');
exports.utf8Encoder = new TextEncoder();
exports.SEC = 'https://w3id.org/security#'; // Proof, VerificationMethod
function getBlankMsg() {
    return {
        id: '',
        created: '',
        dateDeleted: '', // TODO to remove if not used
        content: '',
        maker: '',
        sig: '' // TODO to remove if not used
    };
}
/* export function finishMsg (t: MsgTemplate, privateKey: string): Message {
  // to update to chat message triples
  const message = t as Message
  // message.pubkey = getPublicKey(privateKey)
  message.id = getMsgHash(message)
  message.sig = signMsg(message, privateKey)
  return message
} */
function serializeMsg(msg) {
    // to update to chat messages triples
    /* if (!validateMsg(msg))
      throw new Error("can't serialize message with wrong or missing properties") */
    return JSON.stringify(msg);
}
function getMsgHash(message) {
    const msgHash = (0, sha256_1.sha256)(exports.utf8Encoder.encode(serializeMsg(message)));
    return (0, utils_1.bytesToHex)(msgHash);
}
// const isRecord = (obj: unknown): obj is Record<string, unknown> => obj instanceof Object
/* export function validateMsg<T> (message: T): message is T & UnsignedMsg {
  if (!isRecord(message)) return false
  if (typeof message.kind !== 'number') return false
  if (typeof message.content !== 'string') return false
  if (typeof message.created_at !== 'number') return false
  if (typeof message.pubkey !== 'string') return false
  if (!message.pubkey.match(/^[a-f0-9]{64}$/)) return false

  if (!Array.isArray(message.tags)) return false
  for (let i = 0; i < message.tags.length; i++) {
    let tag = message.tags[i]
    if (!Array.isArray(tag)) return false
    for (let j = 0; j < tag.length; j++) {
      if (typeof tag[j] === 'object') return false
    }
  }

  return true
} */
function verifySignature(sig, message, pubKey) {
    return secp256k1_1.schnorr.verify(sig, getMsgHash(message), pubKey);
}
function signMsg(message, key) {
    return (0, utils_1.bytesToHex)(secp256k1_1.schnorr.sign(getMsgHash(message), key));
}
//# sourceMappingURL=signature.js.map