"physical-lock": listkeys

This CL makes two changes:
1) Streamlines the naming of lock devices. Lock devices are always
named by the name using which they were claimed. This is also the
name that the device authenticates as and a prefix of every key for
the lock.
2) Adds 'listkeys' command to the command-line client that lists
the set of keys bound to the principal invoking the command and the
and the locks to the which they apply.

Change-Id: If3e8bbef4efdec910ebd69b7184478b26fbac229
4 files changed
tree: de24f7426e3008706647f72dcbe76c18870662bc
  1. go/
  2. .gitignore
  3. AUTHORS
  4. CONTRIBUTORS
  5. LICENSE
  6. PATENTS
  7. README.md
  8. VERSION
README.md

Physical lock

This is an example application built on the Vanadium stack.

Development

Features to add to the Lock server:

  1. Auditing: This is one of the strong features of our model, so I‘d imagine that we’d want a:
AuditLog(startTime, endTime time.Time) []AuditLog | error
type AuditLog struct {
  Blessing string
  Action LockStatus
  Timestamp time.Time
}

We'd also have to work out how to control access to this AuditLog. One option is to use caveats - so when “making” a new key one can choose to insert the “noadmin” caveat?

Features to add to the Lock client:

  1. sendkey <lockname> <email> sendkey sends a key for the specified lock and any principal with the specified <email> who is currently running a recvkey command.

Circuitry with the RaspberryPi

Equipment

  • 10KΩ resistor
  • 1KΩ resistor
  • Magnetic switch (normally open circuit - closed when the sensor moves away) (e.g. P/N 8601 Magnetic Switch)
  • For now, an active buzzer to simulate a relay. Will fill in the relay details here once we have that setup.
  • Breadboard, jumper cables, ribbon cable - or whatever is needed to connect to the RPi's GPIO pins

Circuitry

Apologies for this unconventional, possibly unreadable circuit representation. Putting it down so that the author can remember! TODO(ashankar): Clean it up!

The pin number assignments here work both for RaspberryPi Model B/B+ and RaspberryPi2-ModelB.

---(Pin 1)-------/\/\(10KΩ)/\/\---------(COM port of magnetic switch)
                                  \
                                   \----/\/\(1KΩ)/\/\---------(Pin 15 = GPIO22)
                                                          \
                                                           \----(LED)-----|
                                                                          |
                                                                          |
                                          (N.O. port of magnetic switch)--|
                                                                          |
                                                                          |
                                         (-ve terminal of active buzzer)--|
                                                                          |
                                                                          |
                                                                          |
                                                           (Pin 6 = GND)--|

---(Pin 11 = GPIO17)-----------(+ terminal of active buzzer)

Deployment

To build for the RaspberryPi setup with the circuitry mentioned above:

v23 go get -u github.com/davecheney/gpio
V23_PROFILE=arm v23 go install v.io/x/lock/lockd
scp $V23_ROOT/release/projects/physical-lock/go/bin/lockd <rpi_scp_location>

If building without the arm profile, there are no physical switches/relays and instead a simulated hardware is used that uses the interrupt signal (SIGINT) to simulate locking/unlocking externally.