just use one key

This commit is contained in:
Jesse Duffield 2020-01-02 21:37:16 +11:00
parent c0fd658642
commit 34f9a65ec7
6 changed files with 42 additions and 43 deletions

View file

@ -2,11 +2,11 @@
# IT IS ONE OF 5 HORCRUXES THAT EACH CONTAIN PART OF AN ORIGINAL FILE.
# THIS IS HORCRUX NUMBER 1.
# IN ORDER TO RESURRECT THIS ORIGINAL FILE YOU MUST FIND THE OTHER 4 HORCRUX(ES) AND THEN BIND THEM USING THE PROGRAM FOUND AT THE FOLLOWING URL
# https://github/jesseduffield.com/horcrux
# https://github.com/jesseduffield/horcrux
originalFilename: diary.txt
timestamp: 1577946321
timestamp: 1577961383
index: 1
total: 5
key: rGXvq6RAs1w4eWoaFkxYBz4jsGq4a+ueTU17f5C08JY=
encryptedContent: JcE627hkym4el/R7e0EJjZ0RNsWPFTqfPGOnurVtGdhKYHOAA3y8iHds83Go/cX3j7DwMAEr0dwZVcr6XA5ma+cVC/FkUz6RC9O0LaTp/2Ci8SBLNLz09x5alUNWMNg8Oylp3lAgKntBIpQDWl0kaacgLA9BLWxu5t+z5zt8wDO9/yCGaaB4BvphtWbDoLLGkzH2S8wr3QHL36kd4psW4RxktKzBJB7ZxVRx3Cyl/cL4FhYiOD5JF6ncakMzdVz/n15YOjQqqJePtW6B5/HCfAlW50A9Q9m15tWPaeJGL7JVACTUNc1b89neVwV+/S+bCWZDbOSe68v5OC+CYOfssw2PXkwU4LPbZLKEITdRY4fkXL55injMdCWTmSN3IAMPHbJLZw3phOQn5H8IQ4slIBPS/3QiE/pkxyf+vww+S47HxaOplFlNJ73HJqoplPMjS0uQFvm7+O+kIzDLGsu/qZCGze6PgMsIO4RfNH3DUGA/VzW/5qwTX/5HfMZeq2Q98gRl
keyFragment: q3wA1Kuw
encryptedContent: 0+2hNEYtyG8Ae8jrEm0ijTSJhQ52i1BKuXTD0kVMZCTg90ptKb+Cq2oN+YYhUqp1zxmzXl0M+810oB8uQTGZ/zfeUuy3zOVy7KHZcBh4Z42DrMeNsO3fW5iPmJZNGhqXlf5jMW962d1Ivs17l5OXqsEnLLkGA4PjswKsL7r1wL4UCtLWMROfdya1fuvrDdP8hvN/imQsq1Uj+hjuh7kM3SQgvpHMkn+lMDWAhnoMj/lE2BQbWtHXiFZtnVgB4+ZStCXvRSAwKHYMleT5HF6HwhCS0kpsTJNvIjwt8oR3w5uiRoIA/oZPI3EuccGYGa/5J+8uJfNrWGxCCZak4RsX+JuEzE9XlqN1Mtj+wM6290siBB5lE2X1/3li6ayerOfd9hyUxUiuMUgnQrYsnR7M/8Ql585O5ITdG++1NRWqyxkuf0RczJKHNjKHZvdHLnHcXQJ/saNISpNNzrpKrz64I8TM6FkJWyDRRLw3zC

View file

@ -2,11 +2,11 @@
# IT IS ONE OF 5 HORCRUXES THAT EACH CONTAIN PART OF AN ORIGINAL FILE.
# THIS IS HORCRUX NUMBER 2.
# IN ORDER TO RESURRECT THIS ORIGINAL FILE YOU MUST FIND THE OTHER 4 HORCRUX(ES) AND THEN BIND THEM USING THE PROGRAM FOUND AT THE FOLLOWING URL
# https://github/jesseduffield.com/horcrux
# https://github.com/jesseduffield/horcrux
originalFilename: diary.txt
timestamp: 1577946321
timestamp: 1577961383
index: 2
total: 5
key: YYFe3vEvlYZNsdsV4WQFop4xzp7E5TWGCQWH8Ku2TeU=
encryptedContent: 6E2RqHtZM52lErAcp2naY96HqcZM4Vu8rOE/xRMh8dzCXo7vnfkc5gPLrZ/MqKVcVWZSFFsb6Oq8DNxSZz1ORA3gquxRNR6Pjkt6a88cXYBlemmMEcfiRxZNPvHV0w9+Ici4IN56TAXHtGgJnuqpc24B8ep0bu0omC31X/RQkbrcpOy4HP4nFu0KgqOjMnv2Mk4CuT1YJL0AQEyL1MNZBW0rnXyD6DcoIsd0Rng8z/w92BSOKWZTLDix5A401eqIkuS0vIECW540qUW5djPtNR9j1dr6laPdrNb0u8gFLBP+IkGGc8MoIhRNmhTM/m47/m+Pq/d3AJ4hd4Ros0iJ6VCRjnxuoZFmfHoKpbYeoCT+Dl6g6DihHY/AAbFrVxdxLs9ZBPIidZAsx92IMKi3oiBvsLaKMfMHaaJwN9DVnZ2JhNtbuE8P9k5s+d+p4eqm50gVT8wQDDvtGsG8pRltWvxMgPymB/iMhMt83jXqKMZQfAnVKFh6Pl8pePzMjqc9SY9T
keyFragment: CvsLPK5R
encryptedContent: rYgBDCTUI9tCOKoNdyQYX0bWM5UzjDvBqDS8m4t1DcPdOQNSqcYXF+r5n5lSvTRQnktxq2NfJK2B7MM2CSZsbWY5Vv05qVKNMKryiKEi30xcARbxgZJ/IPLa8MbvQ/40Gbqyf3y2ESxYP/yYwI2yOSzj/Bb/JLF0YhrdnM93Qpr2WbiJnBCkDiJbYGIUaymLutev7Qmrwiy/snBuu/h9xoc3E2jYMuqri8D0mW7tHUj/ZQWu8/XWOfntd7c6VL3QHGkqIO8HKD0Z0vb7/2UlrFHI9rg1qa1xXCde9EPHMJLK83cOhOfqu3M1clh3uczV3AaaPT3vtys7uYBdAS9FuSlV21s5yH1kqxPAFKf6SGetyvxrjZArQgMNsffcIZW6SCZSqnwL2fuEeOuffrU5ZuoVZHmAT0ZYlaHsLNrEN3I2um82xLUaSAzZa9r6Vb7HvcBE6pQ6JWXykG6JuXHKATN1dejs1RdX21+Flw

View file

@ -2,11 +2,11 @@
# IT IS ONE OF 5 HORCRUXES THAT EACH CONTAIN PART OF AN ORIGINAL FILE.
# THIS IS HORCRUX NUMBER 3.
# IN ORDER TO RESURRECT THIS ORIGINAL FILE YOU MUST FIND THE OTHER 4 HORCRUX(ES) AND THEN BIND THEM USING THE PROGRAM FOUND AT THE FOLLOWING URL
# https://github/jesseduffield.com/horcrux
# https://github.com/jesseduffield/horcrux
originalFilename: diary.txt
timestamp: 1577946321
timestamp: 1577961383
index: 3
total: 5
key: iOyp3LjpoYuqi/IbljTtibV5vOsr3oL7vynYTRitYXc=
encryptedContent: 3Bv+uWGdtGMLjVTt29T/ZbLJzMth7QNLKhzqROJbYy1q8Op/U4pKGpywihbXxY3ulCA+gIRLr3aQ6iu/oRB0CVIRFSm/paebHnjiq0dsRwesN3UXCr9t6cKVpvLeXP+2RalD+cy8HrbKtm5/4F3o6YKgsT26d7RVxEjHGAkZNWq6FDzeAR49bztegq0Ee9k/UflR8Q02MVz+GPtIZEQ+T4sxO+e3F37HuGFzMTpFqwRMjlDkADXuN/z8+/0/J9hLSO+2/p2+K3nomrrWHZlSsEpINRucRKc4QNMN29cMiux7KVUt6wo8Jv+lKebTg/SjtsIfEgVAUdGsUz9hOlTlV4H7OXdTaRq1gfv1JVeXQoBF1inec4+Ee0j8LtDZK9GOjZ0fsy2iMpdzMzNZTDBaYKnl94HihWRS9MWMgR+QN/xerGEa+T7GKHdlfKbxJfgj5sOmWbiY2BBKG3nlABU26TD/IeNj/lEKw13mUcMP+hU9jUeOWcmyBQPQa2STT5ennUeh
keyFragment: IkTSTewW
encryptedContent: 59Mg8CYGw3p9liIuJ4a2ml9Hglvh6Pq1h0Eso/lOxmOSTYflAfMfIlfVvC0Uqhrsa8oz3Rprl/uouAutsRRkPVCDgyhpcXPK4eKDPJwoGZ+nDJfkIQzrTor1Uaf3vZc0yVRZzZW8pQ83e5CKfooxLpzYTE+fDkjmvNTJaODFf28EJl1hU59XHXNQHoY2u0il6pVsSgsFYg3xzB+gJ4QSCLeYVRQ0yq7Mva9M6EqdgaN8fmbbaEULtp76BL7blmvF8bhHHWLmhFQeRyONoaPUcKUYlmJlOobU6LuGyTvWbu2oyYr9x9HyE2V4j3Xmt5UR6ot0iCmmT5Ya3ivZgIChMYIDtndBD/GF9iC4REP3iYXduzlemTc3H2FofoQaasyJhyBQLKVxsZJQHTybDXpwpafFlxem7WtMrL97/cnU7++YHYJbqA1ihs+/AZJtdx22UQ+Ckl8Y/PqS6FD1FR4EZIvtoZmZangZhqfmm8

View file

@ -2,11 +2,11 @@
# IT IS ONE OF 5 HORCRUXES THAT EACH CONTAIN PART OF AN ORIGINAL FILE.
# THIS IS HORCRUX NUMBER 4.
# IN ORDER TO RESURRECT THIS ORIGINAL FILE YOU MUST FIND THE OTHER 4 HORCRUX(ES) AND THEN BIND THEM USING THE PROGRAM FOUND AT THE FOLLOWING URL
# https://github/jesseduffield.com/horcrux
# https://github.com/jesseduffield/horcrux
originalFilename: diary.txt
timestamp: 1577946321
timestamp: 1577961383
index: 4
total: 5
key: 7GZlILhwGJyyRlB4emgdH/03EEypjvzMtgAit0cc6Ho=
encryptedContent: lDB/NzsKkoBCftOBFQaH4xXrYQKglZd5l958E/9q9YvHz1XuxmtDs9nA1HI44ZEEL4lQP9bhrGHw35RFnPkI+ZLdPOH14RtFV+kCPd7cqXjHHY8IHKyy2CCqPFJZBVRYdJ4ZKuSaQ4gdPuntxBXHVEfeNOa8Fi66ESHXB3ZyARjJ1ZwIpFomulcsAmZn3Y+hVKIg323yqAXUA7ka5NtXw5rAT0L+h1lIC64o0pOUJY07VgxayUEFOXGOVyMEfH/qz+3CZow/JwBJbZEXlNP6JYfs0fx+E56nH4HPhF4E4tN06/ooLeX1Bgv+bwVRDmLH+4SsoylLhPMRgukVY2aIdCKhL+6Y6DQGQSbmrqUlAyVmTtjt+UKcJhq/dxOX4RDiuA6E6T25f9A/BqgSWTyUSHRgNEEvZR2FqwhH7kUJmEV8UpTbpSzBeVR/PNBFbdhrTvQ0BLsANMa2+vKh5ksP0LljGeGAMk3eO5FvzPT5Wlx+RwUT0gvPJ0uH3+09GZ85HFPM
keyFragment: d0nuAPUA
encryptedContent: X10RBfb1bnZL3JyTG/++wogFS6QSbKSKQcsebSa7c8IGxNheVRgVJ+02tL0sJmJT0A4S38CqfALxuvymKm9nQMeopx4JI7CTfn1949e6iwzX93gn8/qMRDelGYEkj+fsn8sO556lOWGq2X6xGgqHpB6IGCa/sGhXKM128zkmYmNuudfnk85oj6FCYfTEPtXQ96CViQWV71lq8f/jS9uf0q67rXRhlt4BuoEtjiJkq37GZoyKMm5tjKuzcJfe7aRmChM4gkEDRl2raFsCKeqLbPFrGZD6eeXVFadupO6G4twKjqprFVCqt4T60ymZCUISoNPYvNqdhruomcvtPKGrn08QPivUozgsC3V3l2iZ/30t0sTrbzV2ZgnZTeadOe9MWTsbqyskvhXuFYo1iDO92q8g50K0TOlYsg5tf2caC/PPB1BPkaJgcCvqPUu9Rir4v5eBA6RcK5EIK8pzouKrLkeuHKSKCIKHjpjy1X

View file

@ -2,11 +2,11 @@
# IT IS ONE OF 5 HORCRUXES THAT EACH CONTAIN PART OF AN ORIGINAL FILE.
# THIS IS HORCRUX NUMBER 5.
# IN ORDER TO RESURRECT THIS ORIGINAL FILE YOU MUST FIND THE OTHER 4 HORCRUX(ES) AND THEN BIND THEM USING THE PROGRAM FOUND AT THE FOLLOWING URL
# https://github/jesseduffield.com/horcrux
# https://github.com/jesseduffield/horcrux
originalFilename: diary.txt
timestamp: 1577946321
timestamp: 1577961383
index: 5
total: 5
key: ItGQygGFvuKyE3nWJGYn6WvvCnGkHT36hioyQt8jn3c=
encryptedContent: RPNsS+2EtzstO+r3ZuQ2V/+utfl7wkOUoSGnrYUoqHIju8/Nkx7KYepneVIAVcMkwIGyX/4ThTdCjzlPpsqXP6slrvVvJbiGlMDGz4h8ryzs+NIcn6plPfSY5Alfnu/ejK8dT9+vD3/pfKnMHTybcb3TutvXwg9Nx9yp5Y+9V8qcVMF6vIxzYe4XXnCOpc5JJoHPQ4sd6pJHRADs3cHhIh7afYaOC06TIpzsuUOypumhBtc9AIaPZcCF5TiXdUOSP+BzYlgVf6FNxCiyUC5WddB/uBV/EDoQJOty8oirer+fA8FMQJ0YyGnI1yV2PTY2vEtPj4X4wdkKZVQxG5uUWj6u9KCvqSNjv6tJJeY5JAKGvb5N53+l/YxZBvqAv0n0nfMLNa3wwq0+wKu/BMo7GntNEcAhdeSofJOHW5pf+1L5KIG6mIB2fMlXhStqHliMwa7xWrwFgIt7fMpDhAEXA0K5LHZVTrxcmAp/8RGFQP/V/M6acQ0qFjTeUAY9MhD+fRI=
keyFragment: pU7/ILtEVtk=
encryptedContent: izYIKcMlTjAN62yw5X0Bj+QH0StXXfnsjovkw6ZQrbzIdNnbAOEjsKHfRNFuYERfpWfcJ9H8gGLlzLVqal1+r+7xDHt6GIPDmTdv03B0feJuPtwC+kYY6cMWmpmmxd2r9ujxhIrUYG/40zWQByRew1VXT5VRADef+SvNTwwqAld0PeNv/s67Fp1hqccnpWHXJ4p0lvKHho5/qZ+EgjDaOU61gfWZ0hPzBiMnO1ji517+FrFFxGDhcoioo2Z4yXl58jp2w4okPqmebLgCrXJu/xyRHWH1tC+nQYI7PD/TdjF5RTu+rHB+9QJAMZwfB/EenjK/0/cuoXjyzLhr8IVt3yJgSCPgVbkYD1KPymAtrsBqvBGtSY+FLuzSeUhlGcbzI1U6QxxFcB+LVkbNTBF2wB+eZr9Z91pSLP8HAYSPJYN6kU0vsR4WMHbtSyDpSQlPw4Qx8boGcDHm0Wvb6rwenF6HZ+56mDWOel+AJw==

45
main.go
View file

@ -58,7 +58,7 @@ type horcrux struct {
Timestamp int64 `yaml:"timestamp"`
Index int `yaml:"index"`
Total int `yaml:"total"`
Key string `yaml:"key"`
KeyFragment string `yaml:"keyFragment"`
EncryptedContent string `yaml:"encryptedContent"`
}
@ -76,27 +76,21 @@ func split(path string) error {
return err
}
// I need <total> keys and I need to encrypt this thing with each key in sequence
keys := make([][]byte, total)
for i := range keys {
keys[i] = make([]byte, 32)
_, err = rand.Read(keys[i])
if err != nil {
return err
}
contentBytes = encrypt(contentBytes, keys[i])
key := make([]byte, 32)
_, err = rand.Read(key)
if err != nil {
return err
}
contentBytes = encrypt(contentBytes, key)
base64EncodedContent := base64.StdEncoding.EncodeToString(contentBytes)
splitContent := splitIntoEqualParts(base64EncodedContent, total)
strKey := base64.StdEncoding.EncodeToString(key)
splitKey := splitIntoEqualParts(strKey, total)
originalFilename := filepath.Base(path)
for i := range keys {
strKey := base64.StdEncoding.EncodeToString(keys[i])
for i := range splitContent {
index := i + 1
h := horcrux{
@ -104,7 +98,7 @@ func split(path string) error {
Timestamp: timestamp,
Index: index,
Total: total,
Key: strKey,
KeyFragment: splitKey[i],
EncryptedContent: splitContent[i],
}
@ -187,6 +181,10 @@ func bind(dir string) error {
horcruxes = append(horcruxes, h)
}
if total == 0 {
return errors.New("No horcruxes in directory")
}
// check that we have the total.
if len(horcruxes) < total {
horcruxIndices := make([]string, len(horcruxes))
@ -205,8 +203,11 @@ func bind(dir string) error {
// now we just need to concatenate the contents together, decode the base64 encoding, then decrypt everything with the first to the last key
encodedContent := ""
encodedKey := ""
for _, h := range orderedHorcruxes {
encodedContent += h.EncryptedContent
encodedKey += h.KeyFragment
}
decodedContentBytes, err := base64.StdEncoding.DecodeString(encodedContent)
@ -214,15 +215,13 @@ func bind(dir string) error {
return err
}
// decrypt in reverse order to how we encrypted
for i := range orderedHorcruxes {
bytesKey, err := base64.StdEncoding.DecodeString(orderedHorcruxes[total-i-1].Key)
if err != nil {
return err
}
decodedContentBytes = decrypt(decodedContentBytes, bytesKey)
decodedKeyBytes, err := base64.StdEncoding.DecodeString(encodedKey)
if err != nil {
return err
}
decodedContentBytes = decrypt(decodedContentBytes, decodedKeyBytes)
newFilename := originalFilename
if fileExists(originalFilename) {
newFilename = prompt("A file already exists named '%s'. Enter new file name: ", originalFilename)