Obel Mono

Variable monospace ( 100 — 900 ) · Roman & Italic

DownloadTry it
  1. 01 Masked
  2. 02 Tester
  3. 03 At work
  4. 04 Family
  5. 05 Glyphs
  6. 06 Download
On screen

ANTHROPIC_API_KEY=sk-ant-api03-Xq7vP2mK9sLr4TfWb

Built into the font. Keys show as dots on screen; the file and your clipboard keep every character. How it works

What it recognizes

205 key prefixes from 82 issuers, and 112 contexts

AI25

Data & ops10

Code & CI9

Payments5

Messaging5

Standards4

Cloud17

Registries7

Contexts13

verify.rs

I Read · a standard and the code that implements it

nvim -O-p rfc7748.txt src/x25519.rs — ~/x25519⌘1
Internet Research Task Force (IRTF)                           A. Langley
Request for Comments: 7748                                        Google
Category: Informational                                       M. Hamburg
ISSN: 2070-1721                             Rambus Cryptography Research
                                                               S. Turner
                                                                   sn3rd
                                                            January 2016


                      Elliptic Curves for Security

Abstract

   This memo specifies two elliptic curves over prime fields that offer
   a high level of practical security in cryptographic applications,
   including Transport Layer Security (TLS).  These curves are intended
   to operate at the ~128-bit and ~224-bit security level, respectively,
   and are generated deterministically based on a list of required
   properties.

Status of This Memo

   This document is not an Internet Standards Track specification; it is
   published for informational purposes.

   This document is a product of the Internet Research Task Force
   (IRTF).  The IRTF publishes the results of Internet-related research
   and development activities.  These results might not be suitable for
   deployment.  This RFC represents the consensus of the Crypto Forum
   Research Group of the Internet Research Task Force (IRTF).  Documents
   approved for publication by the IRSG are not a candidate for any
   level of Internet Standard; see Section 2 of RFC 5741.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   http://www.rfc-editor.org/info/rfc7748.

Copyright Notice

   Copyright (c) 2016 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.


Langley, et al.               Informational                     [Page 1]

Internet Research Task Force (IRTF)
Request for Comments: 7748
Category: Informational
ISSN: 2070-1721

A. Langley
Google
M. Hamburg
Rambus Cryptography Research
S. Turner
sn3rd
January 2016

Elliptic Curves for Security

Abstract

This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.

Status of This Memo

This document is not an Internet Standards Track specification; it is published for informational purposes.

This document is a product of the Internet Research Task Force (IRTF). The IRTF publishes the results of Internet-related research and development activities. These results might not be suitable for deployment. This RFC represents the consensus of the Crypto Forum Research Group of the Internet Research Task Force (IRTF). Documents approved for publication by the IRSG are not a candidate for any level of Internet Standard; see Section 2 of RFC 5741.

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc7748.

Copyright Notice

Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.

  1. //! X25519 after RFC 7748, section 5: the Montgomery ladder on Curve25519.
  2. //! Every step does the same work whatever the key, so timing leaks nothing.
  3. use crate::field::Fe; // integers mod 2^255 - 19
  4. /// (A - 2) / 4 for Curve25519, where A = 486662.
  5. const A24: u32 = 121_665; ■ (486662 − 2) / 4
  6. /// Clear the low three bits and bit 255, and set bit 254.
  7. fn clamp(mut k: [u8; 32]) -> [u8; 32] {
  8. │ k[0] &= 248;
  9. │ k[31] &= 127;
  10. │ k[31] |= 64;
  11. │ k
  12. }
  13. /// Multiply the point with u-coordinate u by the scalar k.
  14. pub fn x25519(k: [u8; 32], u: [u8; 32]) -> [u8; 32] {
  15. │ let k = clamp(k);
  16. │ let x1 = Fe::from_bytes(&u); // the top bit of u is ignored
  17. │ let (mut x2, mut z2) = (Fe::ONE, Fe::ZERO);
  18. │ let (mut x3, mut z3) = (x1, Fe::ONE);
  19. │ let mut swap = 0;
  20. │ for t in (0..255).rev() {
  21. │ │ let k_t = (k[t >> 3] >> (t & 7)) & 1;
  22. │ │ swap ^= k_t;
  23. │ │ Fe::cswap(swap, &mut x2, &mut x3);
  24. │ │ Fe::cswap(swap, &mut z2, &mut z3);
  25. │ │ swap = k_t;
  26. │ │ let a = x2 + z2;
  27. │ │ let aa = a.square();
  28. │ │ let b = x2 - z2;
  29. │ │ let bb = b.square();
  30. │ │ let e = aa - bb;
  31. │ │ let c = x3 + z3;
  32. │ │ let d = x3 - z3;
  33. │ │ let da = d * a;
  34. │ │ let cb = c * b;
  35. │ │ x3 = (da + cb).square();
  36. │ │ z3 = x1 * (da - cb).square();
  37. │ │ x2 = aa * bb;
  38. │ │ z2 = e * (aa + e.mul_small(A24));
  39. │ }
  40. │ Fe::cswap(swap, &mut x2, &mut x3);
  41. │ Fe::cswap(swap, &mut z2, &mut z3);
  42. │ (x2 * z2.invert()).to_bytes()
  43. }
  44. #[cfg(test)]
  45. mod tests {
  46. │ use super::*;
  47. │ use hex_literal::hex;
  48. │ #[test]
  49. │ fn rfc7748_section_5_2() {
  50. │ │ let k = hex!("a546e36bf0527c9d3b16154b82465edd"
  51. │ │ │ "62144c0ac1fc5a18506a2244ba449ac4");
  52. │ │ let u = hex!("e6db6867583030db3594c1a424b15f7c"
  53. │ │ │ "726624ec26b3353b10a903a6d0ab1c4c");
  54. │ │ let r = hex!("c3da55379de9c6908e94ea4df28d084f"
  55. │ │ │ "32eccf03491c71f754b4075577a28552");
  56. │ │ assert_eq!(x25519(k, u), r);
  57. │ }
  58. }
Fig. 1 · Reading RFC 7748, page 1 · © IETF Trust · rfc-editor.org ↗

II Run · a shell, and the status a terminal keeps beside it

tmux — emudhra125 columns
Fig. 2 · Running A 384-bit key, chosen by fair dice roll, beside a status pane in box drawing, blocks and Braille.

III Look · plates made of nothing but its characters

Obel Mono( Pl. 01 )Nine weights
  1. Obel Mono100
  2. Obel Mono200
  3. Obel Mono300
  4. Obel Mono400
  5. Obel Mono500
  6. Obel Mono600
  7. Obel Mono700
  8. Obel Mono800
  9. Obel Mono900
100 → 900One axisEvery cell 0.600 em
01WaterfallNine weights of the name, Thin to Black.
Interference( Pl. 02 )0 / 1
Two digitsTwo sourcesShade is weight
02InterferenceTwo waves in 0s and 1s; weight is the shading.
Labyrinth( Pl. 03 )─ │ ┌ ┼ ━ ┃
Walls that joinCarvingSolved live
03LabyrinthA maze in box drawing, carved and solved live.
Size
Same advance in every style: 0.600 em
  1. 100ThinThe universe believes in encryption.The universe believes in encryption.
  2. 200ExtraLightThe universe believes in encryption.The universe believes in encryption.
  3. 300LightThe universe believes in encryption.The universe believes in encryption.
  4. 400RegularThe universe believes in encryption.The universe believes in encryption.
  5. 500MediumThe universe believes in encryption.The universe believes in encryption.
  6. 600SemiBoldThe universe believes in encryption.The universe believes in encryption.
  7. 700BoldThe universe believes in encryption.The universe believes in encryption.
  8. 800ExtraBoldThe universe believes in encryption.The universe believes in encryption.
  9. 900BlackThe universe believes in encryption.The universe believes in encryption.

Latin Small Letter G

U+0067Essentialsg
line ascent1970cap height1417x-height1083baseline0line descent-530g1200 units · 0.6 em

Download the zip 

Obel Mono and Obel Mono Masked · Roman and Italic · TTF and WOFF2 · the license · 10.4 MB

ObelMono-1.001.zip                      10.4 MB├─ ObelMono/            │  ├─ ttf/variable     2   Roman, Italic│  ├─ ttf/static      18   every weight│  ├─ otf             18│  └─ woff2            3   with a stylesheet├─ ObelMonoMasked/         the same, masking on├─ AUTHORS.txt          ├─ OFL.txt                 the license└─ README.txt           

Open the variable folder, select its .ttf files, double-click, then Install. Restart your terminal.

Just one file: Mono TTFMono WOFF2Masked TTFMasked WOFF2

Install it in one line

Both builds, Roman and Italic, into your fonts folder, each zip checked against its SHA-256 first. No sudo. Read it first.

Terminal · macOS and Linux

curl -fsSL https://typographic.systems/install.sh | sh

  ⢀⣄⡀⣿⢀⣠⡀   Obel Mono 1.001   ⣉⣿⣿⣿⣉    a free font from Typographic Systems  ⠈⠋⠁⣿⠈⠙⠁   typographic.systems   ✓  Obel Mono          2.7 MB   sha-256 3a0ce658  verified  ✓  Obel Mono Masked   2.7 MB   sha-256 09fbe4ff  verified  ✓  Installed          Obel Mono and Obel Mono Masked                        9 weights each, roman and italic                        ~/Library/Fonts $  

↓ Set it up · pick your app for its settings

GhosttyTerminals
Font
Obel Mono
Size
12 · 14 at 1×
Line height
1.25
Mask secrets
One line
~/.config/ghostty/config
font-family = "Obel Mono"
font-feature = ss01
font-size = 12
What you’ll seeKeys as dots
$ env | grep -E "TOKEN|KEY"
GITHUB_TOKEN=ghp_aB3dEFGHiJ7kLmN0pQr
ANTHROPIC_API_KEY=sk-ant-api03-Xq7v

Ghostty shapes text and takes OpenType features in its config.

Terminals6

Terminals · need Masked3

Editors7

Editors · need Masked1

Agent apps · need Masked2

Web1

Bundle it, embed it, modify it. Just don't sell the font on its own. License