From e9f31fe4850d8d136a584a03fc7fe07c6ab0f3ae Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Thu, 3 Oct 2019 15:14:27 -0400
Subject: [PATCH] add missing interface method

---
 src/_zkapauthorizer/controller.py | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/_zkapauthorizer/controller.py b/src/_zkapauthorizer/controller.py
index f6c38f2..5681bf0 100644
--- a/src/_zkapauthorizer/controller.py
+++ b/src/_zkapauthorizer/controller.py
@@ -114,6 +114,25 @@ class IRedeemer(Interface):
             final.
         """
 
+    def tokens_to_passes(message, unblinded_tokens):
+        """
+        Construct passes from unblinded tokens which are suitable for use with a
+        given message.
+
+        :param bytes message: A valid utf-8-encoded byte sequence which serves
+            to protect the resulting passes from replay usage.  It is
+            preferable if every use of passes is associated with a unique
+            message.
+
+        :param list[UnblindedToken] unblinded_tokens: Unblinded tokens,
+            previously returned by a call to this implementation's ``redeem``
+            method.
+
+        :return list[Pass]: Passes constructed from the message and unblinded
+            tokens.  There is one pass in the resulting list for each unblinded
+            token in ``unblinded_tokens``.
+        """
+
 
 @implementer(IRedeemer)
 class NonRedeemer(object):
@@ -132,6 +151,11 @@ class NonRedeemer(object):
         # Don't try to redeem them.
         return Deferred()
 
+    def tokens_to_passes(self, message, unblinded_tokens):
+        raise Exception(
+            "Cannot be called because no unblinded tokens are ever returned."
+        )
+
 
 @implementer(IRedeemer)
 @attr.s
-- 
GitLab