mirror of
https://github.com/jesseduffield/horcrux
synced 2024-05-31 23:02:14 +02:00
just use one key
This commit is contained in:
parent
c0fd658642
commit
34f9a65ec7
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
45
main.go
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue