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