Git Product home page Git Product logo

age.el's People

Contributors

anticomputer avatar bram85 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

age.el's Issues

make memory resident operations the default

Apparently epg runs temporary decryption through whatever the temporary-file-directory is set to. This is /tmp by default and that is not ideal, to say the least. This means that Emacs gpg decryptions litter the /tmp directory with plaintext copies of your gpg files (during a small window when opening or saving).

It does this with a predicatable pattern gpg-output* or gpg-input* since age.el is a port of epg functionality, it has the same weakness.

As a stopgap, age.el will run these operations through /dev/shm when and where it is available. I'll think about how we can do a buffer-only operation, since in our threat model limiting our plaintext exposure to emacs memory contents is the best we can hope for. While someone that has user privileges to monitor e.g. /dev/shm for file creations can obviously also dump memory from the emacs process, this would be a more annoying proposition than placing a filewatch and harvesting plaintext copies of decrypted files out of a temporary directory.

Making these intermediate writes at least remain memory resident as opposed to disk resident when /dev/shm is an option is a reasonable first step I reckon.

I'll note that memory contents can/will be flushed to disk in a variety of scenarios, but I don't like the idea of such a simple harvesting mechanism being available by default.

I think I should be able to just rework it such that everything runs over process stdio as opposed to intermediate plaintext files.

support age pinentry mechanism

While age discourages use of passphrase based symmetric encryption, and age.el does not intend to encourage or support symmetric passphrase based encryption for age files, we do need to support e.g. passphrase protected age identities.

Currently when trying to use a passphrase protected private ssh key as your identity from age.el you'll run into the following error:

run-hook-with-args-until-success: Opening input file: Age failed with error, failed to obtain passphrase: could not read passphrase for "/Users/anticomputer/.ssh/id_rsa": open /dev/tty: device not configured

We require a pinentry mechanism as age reads passphrases only via /dev/tty. The implication of FiloSottile/age#256 appears to be that we'll have to write a plugin, but I'd like folks to only have to depend on the age cli as a dependency for age.el, so I'll need to investigate alternatives for pinentry to age.

A workaround based on using rage instead of age is described at: https://github.com/anticomputer/age.el#known-issues

detect passphrase encrypted age files prior to handing them off to age clients

The current age.el mechanism for dealing with passphrase encrypted age files is a bit clunky and requires some custom functions and let bindings to disable the default asymmetric behaviors.

To address this we should implement a simple elisp based check for presence of the scrypt stanza as per https://github.com/C2SP/C2SP/blob/main/age.md which should be as simple as base64 decoding the file and matching on the presence of "-> scrypt" on the second line of the age v1 header.

saving over TRAMP writes a plaintext copy of the buffer

When editing an age buffer in a TRAMP context, it decrypts fine if the file already exists, but on save will write a plaintext copy of the buffer to the remote end as opposed to the encrypted contents. I'm resolving this issue for 0.1.2.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.