1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.jce.provider;
2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport org.bouncycastle.asn1.x509.ReasonFlags;
4c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom/**
6c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * This class helps to handle CRL revocation reasons mask. Each CRL handles a
7c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom * certain set of revocation reasons.
8c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom */
9c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromclass ReasonsMask
10c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{
11c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private int _reasons;
12c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
14c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Constructs are reason mask with the reasons.
15c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param reasons The reasons.
17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    ReasonsMask(ReasonFlags reasons)
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        _reasons = reasons.intValue();
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    }
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    private ReasonsMask(int reasons)
24c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        _reasons = reasons;
26c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
28c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
29c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * A reason mask with no reason.
30c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
31c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
32c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    ReasonsMask()
33c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
34c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        this(0);
35c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
37c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
38c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * A mask with all revocation reasons.
39c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
40c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    static final ReasonsMask allReasons = new ReasonsMask(ReasonFlags.aACompromise
41c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            | ReasonFlags.affiliationChanged | ReasonFlags.cACompromise
42c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            | ReasonFlags.certificateHold | ReasonFlags.cessationOfOperation
43c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            | ReasonFlags.keyCompromise | ReasonFlags.privilegeWithdrawn
44c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            | ReasonFlags.unused | ReasonFlags.superseded);
45c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
46c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
47c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Adds all reasons from the reasons mask to this mask.
48c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
49c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param mask The reasons mask to add.
50c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    void addReasons(ReasonsMask mask)
52c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
53c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        _reasons = _reasons | mask.getReasons();
54c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
55c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
56c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
57c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Returns <code>true</code> if this reasons mask contains all possible
58c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * reasons.
59c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
60c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @return <code>true</code> if this reasons mask contains all possible
61c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *         reasons.
62c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
63c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    boolean isAllReasons()
64c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
65c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return _reasons == allReasons._reasons ? true : false;
66c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
67c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
68c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
69c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Intersects this mask with the given reasons mask.
70c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
71c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param mask The mask to intersect with.
72c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @return The intersection of this and teh given mask.
73c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
74c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    ReasonsMask intersect(ReasonsMask mask)
75c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
76c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        ReasonsMask _mask = new ReasonsMask();
77c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        _mask.addReasons(new ReasonsMask(_reasons & mask.getReasons()));
78c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return _mask;
79c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
80c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
81c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
82c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Returns <code>true</code> if the passed reasons mask has new reasons.
83c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
84c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @param mask The reasons mask which should be tested for new reasons.
85c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @return <code>true</code> if the passed reasons mask has new reasons.
86c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
87c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    boolean hasNewReasons(ReasonsMask mask)
88c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
89c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return ((_reasons | mask.getReasons() ^ _reasons) != 0);
90c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
91c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
92c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
93c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * Returns the reasons in this mask.
94c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
95c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     * @return Returns the reasons.
96c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
97c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    int getReasons()
98c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
99c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return _reasons;
100c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
101c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom}
102