Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 4x 4x 4x 4x 14x 14x 14x 3x 11x 15x 18x 1x 1x 15x 2x 2x 2x 2x | import { Signature } from "ethers";
import {
arrayify,
base64,
concat,
joinSignature,
splitSignature,
} from "ethers/lib/utils";
import { Serializable } from "../common/Serializable";
import { DataPackage, DataPackagePlainObj } from "./DataPackage";
import {
SignedDataPackageLike,
deserializeSignedPackage,
recoverSignerAddress,
recoverSignerPublicKey,
} from "./signed-package-deserializing";
export interface SignedDataPackagePlainObj extends DataPackagePlainObj {
signature: string; // base64-encoded joined signature
}
export class SignedDataPackage
extends Serializable
implements SignedDataPackageLike
{
public readonly signature: Signature;
constructor(
public readonly dataPackage: DataPackage,
signature: Signature | string
) {
super();
if (typeof signature === "string") {
this.signature = splitSignature(signature);
} else {
this.signature = signature;
}
}
serializeSignatureToBytes(): Uint8Array {
return arrayify(this.serializeSignatureToHex());
}
serializeSignatureToHex(): string {
return joinSignature(this.signature);
}
recoverSignerPublicKey(): Uint8Array {
return recoverSignerPublicKey(this);
}
recoverSignerAddress(): string {
return recoverSignerAddress(this);
}
toBytes(): Uint8Array {
return concat([
this.dataPackage.toBytes(),
this.serializeSignatureToBytes(),
]);
}
toObj(): SignedDataPackagePlainObj {
const signatureHex = this.serializeSignatureToHex();
return {
...this.dataPackage.toObj(),
signature: base64.encode(signatureHex),
};
}
public static fromObj(
plainObject: SignedDataPackagePlainObj
): SignedDataPackage {
return SignedDataPackage.fromObjLikeThis(
deserializeSignedPackage(plainObject)
);
}
private static fromObjLikeThis(object: SignedDataPackageLike) {
return new SignedDataPackage(object.dataPackage, object.signature);
}
}
|