61 lines
2.1 KiB
Plaintext
61 lines
2.1 KiB
Plaintext
[[[ PicSeal Design Document ]]]
|
|
|
|
|
|
[[ JPG file parse Pseudo Code ]]
|
|
|
|
1) Verify File
|
|
a. read JPG file: find record markers, save file locations
|
|
b. verify no parsing issues
|
|
c. save file locations for metatdate
|
|
d. save file locations for image data
|
|
2) Generate Hash
|
|
a. hash all image data
|
|
3) Digital Signature
|
|
a. generate new public key pair
|
|
b. sign hash data with priv key
|
|
4) Write new PicSeal Public file
|
|
a. write encrypted original metadata
|
|
b. write PicSeal metadata
|
|
i. write JSON
|
|
b. write image data
|
|
5) Write new PicSeal Private file
|
|
a. create thumbnail (smaller files)
|
|
b. write PicSeal metadata (JSON)
|
|
c. write image data
|
|
|
|
|
|
|
|
[[ PicSeal Metadata ]]
|
|
|
|
[ binary data blob format ]
|
|
# Pub: [app15:2|size:2|'picseal':7|type:1|sig:512|pubkey:550]
|
|
# Pvt: [app15:2|size:2|'picseal':7|type:1|sig:512|pvtkey:2347]
|
|
|
|
# 1. app15 jpg marker
|
|
app15_marker = b'\xff\xef'
|
|
|
|
# 2. ascii code for "picseal"
|
|
picseal_marker = b'\x70\x69\x63\x73\x65\x61\x6C'
|
|
|
|
# 3. type
|
|
pub_marker = b'\x01'
|
|
pvt_marker = b'\x02'
|
|
|
|
# 4. signature is the hash of the image, signed by the private key
|
|
|
|
# 5. JSON crypto blob data
|
|
|
|
|
|
|
|
[ crypto blob format ]
|
|
JSON:
|
|
{
|
|
"format_ver": "50",
|
|
"pubkey_alg": "rsa",
|
|
"pubkey_size": 4096,
|
|
"pubkey_pem": "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnvdAyn5JuiRcoL8s+rAV\nMpoEUioB1NTV97EDG4z/R5pm89v86UkH0xeeB6OS2EacsPHmbIY6oY0IXKA+0EX6\nSZdVSya2vv36fy/CByfHgZsDUxpzMnRZLdYbITBwil7keCTOC4EfnYIMUDsvrx6s\nA+BSEbR1rUkIXMe7NJ2Qssj68lXKMOfhrJ9wUgPLVSTIiDytiX4Wd+yAuo9lUqUk\nxt7FwjEEBV5Nj0yKZp2sJZnqp+pL5dsLsYz9xKNQHonMkGuj+3IthenTkfuXm9a6\nx+Qm3B+6AN4qBd7Uz65tffS2e2OQCzSRVoqEaRUrQKvQcSfJv+w0lh4xoZs41CJE\nc8XmmJeaDqt/zYBQWWYJlvZfpq0oh3mKGmHRtNOnKQmMd+FRJj/5fUvG7WedcHt1\noAkUg1qKu/HBgPNTVN9PWaikM1fA1E8T1koCYN0ecP29Zo8SHwcL6g82ou+fGtae\nSrXW0bFKV1JbF+hF3nBzCw+xDPAXXpUGPTwSXYZa6Gvgfckk4qP17vfFaR9f+hiL\nmW8GUmgfupvbapcG189M+UB9nDUSj3557TJpqItdbH5m4FGNv9tcMRYSwIniVVxw\n+F5FuT7nhd8vC+simwyjlB3hteICya1c7tVo5rav/LBBzHYg9ywPJCdZKUvN3qRE\n4Txbp7DC99x/xZhGck2Cpj8CAwEAAQ==",
|
|
"image_sig": "6acda44a9e492ddcc0e6ddadbdbd2cc20fdbb06a9264f36268b03aff921332919edb541d9bcdafa2b958276fb553682e5b67d92a127ec8d5d89b29774db86c50",
|
|
"metadata_sig": ""
|
|
}
|
|
|