56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
QR Code Encoder
 | 
						|
===============
 | 
						|
 | 
						|
Reference used was ISO/IEC 18004, 1st Edition (2000)
 | 
						|
 | 
						|
This implementation is informed by my specific needs, i.e. to provide
 | 
						|
two-factor authentication for mobile phones running Google Authenticator.
 | 
						|
 | 
						|
+ "Byte" mode only (don't need e.g. numeric mode or kanji mode).
 | 
						|
+ Encode only (no detection/decode).
 | 
						|
+ Basic supporting library functions provided (HOTP, PNG image functions) to allow full-cyle demo.
 | 
						|
 | 
						|
Demo
 | 
						|
====
 | 
						|
 | 
						|
1. Download repo and compile with `erl -make`
 | 
						|
2. Install Google Authenticator App on your mobile:
 | 
						|
	+ iPhone:  http://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8
 | 
						|
	+ Android: https://market.android.com/details?id=com.google.android.apps.authenticator
 | 
						|
3. Run demo: `qrcode_demo:run().`
 | 
						|
4. Open the generated `qrcode.png` file
 | 
						|
5. Scan the qrcode into the phone.
 | 
						|
6. Ensure server clock is correct.
 | 
						|
7. The value of `qrcode_demo:totp()` should show the same passcode as the phone.
 | 
						|
8. Handle PINs/logins for the second part of the "two factor" according to your application design.
 | 
						|
 | 
						|
NOTE: This documentation is rather basic as this was open-sourced by specific request!
 | 
						|
 | 
						|
 | 
						|
How to use QR Code Encoder with Elixir
 | 
						|
======================================
 | 
						|
 | 
						|
Add :qrcode to `mix.deps`
 | 
						|
::
 | 
						|
 | 
						|
    defp deps do
 | 
						|
      [{:qrcode, git: “git@gitlab.com:Pacodastre/qrcode.git”}]
 | 
						|
    end
 | 
						|
 | 
						|
Then run:
 | 
						|
::
 | 
						|
 | 
						|
    mix deps.get
 | 
						|
    mix deps.compile
 | 
						|
 | 
						|
Then, whenever you have this compiled, you should have access to the functions available in elixir.
 | 
						|
 | 
						|
    iex(1)> qrcode = :qrcode.encode(“bla”)
 | 
						|
    {:qrcode, 1, :M, 29,
 | 
						|
     <<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 211, 248, 4, 16, 208, 64, 46, 152, ...>>}
 | 
						|
     iex(2)> png = :qrcode_demo.simple_png_encode(qrcode)
 | 
						|
     <<137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, 232, 0, 0, 0, ...>>
 | 
						|
     iex(3)> :file.write_file(“example.png”, png)
 | 
						|
     :ok
 | 
						|
 |